Virtuální servery umožňují hostovat na jednom počítači více domén. Je to spolehlivý a ověřený způsob, jak ušetřit náklady na administraci zvláštního serveru pro každou doménu. Apache nabízí hned několik možností, jak virtuální servery nastavit:
Virtuální server založený na jménu.
Virtuální server založený na IP.
Vícenásobné instance Apache na jednom počítači.
Virtuální server založený na jménu hostuje na jedné instanci Apache několik domén. Není nutné nastavovat žádné další IP adresy. Jedná se o nejjednodušší a nejčastěji používanou možnost. Důvody proti této konfiguraci najdete v dokumentaci Apache.
Konfigurace se provádí přímo v konfiguračním souboru
/etc/apache2/httpd.conf. Abyste
aktivovali virtuální server založený na jménu, musíte
zadat NameVirtualHost *.
Nastavení * způsobí, že bude Apache
přijímat všechny příchozí požadavky. Pak nastavte
jednotlivé servery:
<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>
VirtualHost musí být nastaven i pro originální
doménu serveru (www.example.com). Originální
doména i dodatečná doména (www.myothercompany.com)
jsou v našem příkladě hostovány na stejném serveru.
Stejně jako v NameVirtualHost je v direktivách
VirtualHost použita *. Apache
používá pole "host" v HTTP hlavičce pro spojení požadavků s virtuálním
serverem. Požadavek je doručen tomu virtuálnímu serveru, jehož nastavení
v ServerName odpovídá údaji v HTTP hlavičce.
Pro direktivy ErrorLog a CustomLog
nemusí záznamy obsahovat jméno domény. Použijte jméno podle vlastní
volby.
Serveradmin obsahuje e-mailovou adresu osoby,
která má být kontaktována v případě problémů. Apache tuto adresu
předává klientům v případě potíží.
Alternativou serveru založeného na jménu je nastavení více IP adres
pro jeden jediný počítač. V takovém případě jediná instance Apache
hostuje více domén s různými IP adresami. V následujícím příkladu
si ukážeme konfiguraci Apache používajícího vlastní IP adresu
(192.168.1.10) plus
další dvě dodatečné IP adresy
(192.168.1.20 a
192.168.1.21).
Tento konkrétní příklad funguje pouze na intranetu, protože se
jedná o privátní adresy, které nejsou na Internetu směrovány.
Aby Apache mohl pracovat s více IP, musí počítač přijímat požadavky na více IP. Tomu se říká multi-IP hosting. Tato funkce vyžaduje podporu IP aliasingu v jádře. Tato podpora je v SUSE Linuxu výchozí.
Pokud je v jádře povolen IP aliasing, lze pomocí příkazů
ifconfig a route nastavovat
další IP adresy počítače. Tyto příkazy musí vykonávat uživatel
root. V následujícím
příkladě budeme předpokládat, že počítač již má vlastní IP adresu
(např. 192.168.1.10),
která je přiřazena zařízení eth0.
Příkazem ifconfig bez parametrů zjistíte IP adresu počítače. Další IP nastavíte příkazem:
ip addr add 192.168.1.20/24 dev eth0
Všechny IP adresy používají stejné síťové fyzické zařízení
(eth0).
Jakmile je na počítači nastaveno IP aliasování nebo má počítač
více síťových karet, můžete nastavit virtuální servery Apache.
Pro každý virtuální server musíte vložit vlastní blok
VirtualHost:
<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>
Proměnná VirtualHost se používá pouze pro dodatečné
domény. Výchozí doména (www.example.com) je nastavena
zvlášť v DocumentRoot mimo bloky
VirtualHost.
Při použití výše zmíněných metod může administrátor jedné domény číst
data ostatních domén. Abyste jednotlivé domény oddělili, musíte spustit
další instance Apache, které budou používat zvláštní nastavení
uživatele, skupiny a
dalších proměnných v konfiguračním souboru.
V konfiguračním souboru nastavte proměnnou Listen
na IP adresy obsluhované jednotlivými instancemi Apache. V našem
případě bude zápis pro první instanci:
Listen 192.168.1.10:80
A pro další dvě instance:
Listen 192.168.1.20:80 Listen 192.168.1.21:80