Virtual hosting is the capability of a single system to serve multiple web domain addresses. For example, a single server could respond to requests for www.acme.com and www.coyote.com. This is clearly useful for public web sites, but virtual hosting is also an excellent technique to manage separate content within a single domain. For example, the administration interface and the user interfaces can be implemented as separate virtual hosts.
Virtual hosts are created by grouping configuration directives within a VirtualHost directive block. Directives within the block apply only to the virtual host.
<VirtualHost> ServerName www.acme.com Documents /var/www/acmeDocs ... </VirtualHost>
The VirtualHost directive may optionally take a list of IP:PORT endpoints on which to attach. Only these endpoints will be connected to the virtual host. For example:
<VirtualHost *:80, *:443> ServerName www.acme.com Documents /var/www/acme ... </VirtualHost>
The VirtualHost directive creates a new Host and routes for that host. The settings of outer directives are inherited, but the routes are not inherited.
Name-Based Virtual Hosts
Name-based virtual hosts allow multiple virtual hosts to share an IP address by using the HTTP Host header to distinguish which virtual host should service the request.
<VirtualHost> ServerName www.acme.com Documents /var/www/acme ... </VirtualHost> <VirtualHost> ServerName www.coyote.com Documents /var/www/coyote ... </VirtualHost>
In this example www.acme.com and www.coyote.com will listen on all endpoints.
The ServerName directive supports wild cards and regular expressions. In this manner, a single virtual host block may serve multiple domains. For example
ServerName *.example.com # matches anything.example.com ServerName www.example.* # matches any domain containing www.example. ServerName /example.com|acme.com|coyote.com/
IP-based Virtual Hosts
IP-based virtual hosts allow multiple virtual hosts to be supported on a single server. Each IP-based virtual host consumes a separate IP address.
<VirtualHost 18.104.22.168> ServerName www.acme.com Documents /var/www/acme ... </VirtualHost> <VirtualHost 22.214.171.124> ServerName www.coyote.com Documents /var/www/coyote ... </VirtualHost>
In this example, www.acme.com and www.coyote.com are separate virtual hosts.