Apache2: VirtualHost

Obrázok používateľa %user

V tomto článku si povieme niečo o konfigurácí Apache, čo to vlastne tie VirtualHost-y sú, aké majú využitie a ako ich jednoducho nakonfigurujeme.

Čo to vlastne ten Virtualhost je? Je to vec, bez ktorej by sa dnešné webhostingy veľmi ťažko zaobyšli. Virtualhost totiž umožnuje na jednom "železe" hostovať viacej od seba nezávyslích stránok.

Nejedná sa len o domény prvej úrovne. Môže ísť o doménu druhej, tretej, štvrtej úrovne, alebo len názov daného VirtualHost-u (nemusí byť teda nutne doména).

Dnes je to už viac-menej bežná vec ako na serveroch, tak aj na desktopoch ľudí zaoberajúcich sa vývojom webaplikácií.

Ako to funguje? Predsa keď na server príde požiadavka, podľa čoho rozlíši pre aký VirtualHost je určená? Sú dve možnosti.

Prvá z nich je rozlišovanie VirtualHost-ov podľa IP adresy /tkz. IP-based virtualhost/. Teda v danom stroji máte viacej sieťových kariet a podľa toho, na ktorú IP adresu príde požiadavka sa načíta obsah daného VirtualHost-u.

Druhá, bežnejšia pri menších projektoch, resp. freehostingoch je, že sa VirtualHost-y rozlišujú podľa položky určujúcej daný VirtualHost v požiadavke clienta na server/tkz. Name-based virtualhost/, konkrétne ide o pole Host (definované v protokole HTTP/1.1 podľa RFC 2616, sekcia 14.23).

Toľko teórie, pozrime sa teraz konkrétne ako toto zrealizujeme. (Uvedený príklad funguje na Apache 2.0 na Ubuntu server Dapper Drake).

Vytvoríme si nový súbor v /etc/apache2/sites-available , nazveme ho napríklad myhosts.

sudo nano /etc/apache2/sites-available/myhosts

a jeho obsah

#ip-based virtual host
<VirtualHost 192.168.0.1:80> #IP pre dany virtualhost
ServerAdmin admin@server.tld #email administratora servera
ServerName ipvirtualhost.sk #meno servera
DocumentRoot /var/www/ipvirtualhost.sk/ #cesta k suborom pre dany virtualhost POZOR na lomitko na konci!!
</VirtualHost>

#name-based virtualhost

NameVirtualHost 192.168.0.1:80 #definuje IPadresu, pre ktoru platia
nasledujuce pravidla (je mozne pouzit * pre vsetky sietove karty v systeme)

<VirtualHost *:80>
ServerAdmin admin@server.tld #email administratora servera
ServerName namebased.sk #meno servera
ServerAlias www.namebased.sk #alias pre dany server
DocumentRoot /var/www/namebased.sk/ #cesta k suborom pre dany virtualhost POZOR na lomitko na konci!!
</VirtualHost>

uložíme stlačením CTRL + O. Teraz daný súbor ešte musíme enablovať, urobíme to príkazom

sudo a2ensite myhosts

a reštartneme apache

sudo /etc/init.d/apache2 restart

Stojí za to ešte spomenúť, že prvý Name-based VirtualHost bude implicitný pre dané rozhranie /teda dané IP zvolené v NameVirtualHost/. Teda ak si naň niekto nasmeruje doménu, ktorá nemusí byť inak zahrnutá do virtualhostov, zobrazí sa mu práve daná stránka.

Samozrejme do nastavení daných VirtualHost-ov môžeme zahrnúť aj nastavenia Options, prípadne si určit CustomLog-y pre daný VirtualHost.

Dúfam, že som Vám danú problematiku aspoň trošku objasnil, odporúčam si ešte pozrieť video z prednášky o Apache (po česky) na
http://avc.sh.cvut.cz/avc.php?id=3501 .

V prípade, že by ste mali nejaké otázky, smerujte ich do komentárov:)