Using virtual hosts, host several domains with a single Web server. In this way, save the costs and administration workload for separate servers for each domain. There are several options regarding virtual hosts:
Name-based virtual hosts
IP-based virtual hosts
Operation of multiple instances of Apache on one machine
With name-based virtual hosts, one instance of Apache hosts several domains. You do not need to set up multiple IPs for a machine. This is the easiest, preferred alternative. Reasons against the use of name-based virtual hosts are covered in the Apache documentation.
Configure it directly by way of the configuration file
/etc/apache2/httpd.conf
. To activate name-based
virtual hosts, specify a suitable directive.
NameVirtualHost *
.
*
is sufficient to prompt
Apache to accept all incoming requests.
Subsequently, configure the individual hosts:
<VirtualHost *> ServerName www.example.com DocumentRoot /srv/www/htdocs/example.com ServerAdmin webmaster@example.com ErrorLog /var/log/apache2/www.example.com-error_log CustomLog /var/log/apache2/www.example.com-access_log common </VirtualHost>
<VirtualHost *> ServerName www.myothercompany.com DocumentRoot /srv/www/htdocs/myothercompany.com ServerAdmin webmaster@myothercompany.com ErrorLog /var/log/apache2/www.myothercompany.com-error_log CustomLog /var/log/apache2/www.myothercompany.com-access_log common </VirtualHost>
A VirtualHost
entry must also be configured for the domain originally hosted on the
server (www.example.com). In this example, the original
domain and one additional domain (www.myothercompany.com)
are hosted on the same server.
Just as in NameVirtualHost
, a * is used
in the VirtualHost
directives.
Apache uses the host field in the HTTP header to
connect the request to the virtual host. The request is forwarded to the
virtual host whose ServerName
matches the hostname
specified in this field.
For the directives ErrorLog
and
CustomLog
, the log files do not need to contain the
domain name. Here, use a name of your choice.
ServerAdmin
designates the e-mail address of the
responsible person that can be contacted if problems arise. In the event of
errors, Apache gives this address in the
error messages it sends to clients.
This alternative requires the setup of multiple IPs for a machine. In this
case, one instance of Apache hosts several
domains, each of which is assigned a different IP. The following example
shows how Apache can be configured to host the
original IP (192.168.1.10
) plus
two additional domains on additional IPs (192.168.1.20
and 192.168.1.21
). This particular
example only
works on an intranet, because IPs ranging from 192.168.0.0
to
192.168.255.0
are not routed on the Internet.
For Apache to host multiple IPs, the underlying machine must accept requests for multiple IPs. This is called multi-IP hosting. For this purpose, IP aliasing must be activated in the kernel. This is the default setting in SUSE LINUX.
Once the kernel has been configured for IP aliasing, the commands
ifconfig and route can be used to
set up additional IPs on the host. These commands must be executed as
root
. For the following example,
it is assumed that the host already has its own IP, such as
192.168.1.10
, which is
assigned to the
network device eth0
.
Enter the command ifconfig to view the IP of the host. Further IPs can be added with the following command:
ip addr add 192.168.1.20/24 dev eth0
All these IPs are assigned to the same physical network
device (eth0
).
Once IP aliasing has been set up on the system or the host has been
configured with several network cards, Apache
can be configured. Specify a separate VirtualHost
block
for every virtual server:
<VirtualHost 192.168.1.20> ServerName www.myothercompany.com DocumentRoot /srv/www/htdocs/myothercompany.com ServerAdmin webmaster@myothercompany.com ErrorLog /var/log/apache2/www.myothercompany.com-error_log CustomLog /var/log/apache2/www.myothercompany.com-access_log common </VirtualHost> <VirtualHost 192.168.1.21> ServerName www.anothercompany.com DocumentRoot /srv/www/htdocs/anothercompany.com ServerAdmin webmaster@anothercompany.com ErrorLog /var/log/apache2/www.anothercompany.com-error_log CustomLog /var/log/apache2/www.anothercompany.com-access_log common </VirtualHost>
VirtualHost
directives are only specified for the
additional domains. The original domain (www.example.com) is configured through its own
settings
(under DocumentRoot
, etc.) outside the
VirtualHost
blocks.
With the above methods for providing virtual hosts, administrators of
one domain can read the data of other domains. To segregate the individual
domains, start several instances of
Apache, each with its own settings for
User
, Group
, and
other directives in
the configuration file.
In the configuration file, use the Listen
directive
to specify the IP handled by the respective
Apache instance. For the above example, the
directive for the first Apache instance would be:
Listen 192.168.1.10:80
For the other two instances:
Listen 192.168.1.20:80 Listen 192.168.1.21:80