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.