Apachen virtuaalipalvelut
Apachen konfiguraatio tukee virtuaalipalveluita VirtualHost eli vhost-konfiguraation avulla. Sen avulla yksi HTTP-palvelin voi palvella useita eri verkkotunnuksia sekä alidomaineja. Käytännössä yksi Apache-instanssi voi sisältää kymmeniä VirtualHost-lohkoja, jotka kaikki toimivat itsenäisinä sivustoina.
Apachen vhost-määrittelyt voivat perustua nimipohjaisiin tai IP-pohjaisiin virtuaalipalvelumäärityksiin. Useimmiten käytössä on nimipohjainen virtuaalipalvelu, jolloin kaikki samalla palvelimella olevat sivustot jakavat yhden IP-osoitteen.
Nimipohjaiset virtuaalipalvelut
Nimipohjaiset virtuaalipalvelut luottavat asiakkaan välittämään isäntänimeen IP-osoitteen sijasta. Tätä tekniikkaa käyttämällä, useat palvelut voivat jakaa saman IP-osoitteen. Nimipohjaisen virtuaalipalvelun perustaminen on myös usein helppoa, koska nimipalvelin tarvitsee mapata vain yhdistämään isäntänimi oikeaan IP-osoitteeseen. Apache hoitaa loppuosan.
Jotta nimipohjaisia virtuaalipalveluja voi käyttää, täytyy Apachelle kertoa mitä IP:tä kuunneella.
Tämä määritellään ominaisuudella NameVirtualHost.
Yleensä ominaisuuden arvoksi merkitään asteriks (*), joka tarkoittaa että kaikki IP-osoitteet ovat kelvollisia.
Arvoksi voi antaa myös IP-osoitteen.
Seuraava askel on luoda <VirtualHost>-lohko, jossa määritellään virtuaalipalvelu. Jokaisen lohkon sisällä tulisi määritellä vähintään virtuaalipalvelun nimi ominaisuudella ServerName sekä sivuston julkaisukansio ominaisuudella DocumentRoot. Esimerkki:
NameVirtualHost *
<VirtualHost *>
ServerName www.2kmediat.com
DocumentRoot /www/2k
</VirtualHost>
<VirtualHost *>
ServerName yritys.2kmediat.com
DocumentRoot /www/corp/
</VirtualHost>
Apache tarkistaa IP-osoitteen perusteella, sopiiko se NameVirtualHost-määritykseen. Tämän jälkeen se etsii ServerName- tai ServerAlias-määrityksen perusteella oikean konfiguraation. Jos osumaa ei löydy, käytetään listan ensimmäistä virtuaalipalvelua oletuksena.
IP-pohjaiset virtuaalipalvelut
IP-pohjaisissa virtuaalipalvelumäärittelyissä osalla tai kaikilla palveluilla on toisistaan eroava IP-osoite. Tällaisessa tilanteessa Apache voidaan konfiguroida joko suorittamaan erillinen httpd daemon jokaiselle isäntänimelle tai käyttämään yhtä jaettua daemonia, joka käsittelee kaikki isäntänimet.
Keskitymme tässä tarkastelemaan jälkimmäistä tapaa, jolloin konfigurointi tapahtuisi seuraavasti:
<VirtualHost 192.168.1.100>
ServerAdmin webmaster@2kmediat.com
DocumentRoot /www/2k
ServerName www.2kmediat.com
ErrorLog /logs/error2k_log
TransferLog /logs/access2k_log
</VirtualHost>
<VirtualHost 192.168.1.101>
ServerAdmin webmaster@2kmediat.com
DocumentRoot /www/corp
ServerName www.2kmediat.com
ErrorLog /logs/errorCorp_log
TransferLog /logs/accessCorp_log
</VirtualHost>
Staging- ja tuotantoympäristöt virtuaalipalvelujen avulla
Virtuaalipalveluiden avulla voidaan helposti erottaa staging- eli testipalvelin tuotantoversiosta. Esimerkiksi:
<VirtualHost *:80>
ServerName staging.yritys.fi
DocumentRoot /var/www/staging
</VirtualHost>
<VirtualHost *:80>
ServerName www.yritys.fi
DocumentRoot /var/www/production
</VirtualHost>
Tämä rakenne mahdollistaa uuden version testaamisen ilman, että se vaikuttaa loppukäyttäjiin. Lisäksi voidaan käyttää erillisiä virhelokeja ja ympäristömuuttujia stagingin ja tuotannon välillä.
Virtuaalipalvelujen konfiguraation hajauttaminen
Yksittäisellä Apache-palvelimella voi olla jopa satoja erilaisia virtuaalipalveluja. Tällöin hallintaa voidaan helpottaa hajauttamalla vHostien-konfiguraatio erillisiin tiedostoihin. Esimerkiksi:
# httpd.conf
IncludeOptional sites-enabled/*.conf
Tämän jälkeen jokainen sivusto voi olla omassa tiedostossaan, esim. sites-enabled/yritys.conf.
Tämä rakenne parantaa ylläpidettävyyttä ja mahdollistaa automaattisen sivustojen hallinnan skriptien avulla.