Apache2 on omalla tavallaan kohtuullisen yksioikoinen peruskäytössä. Kun halutaan ottaa käyttöön uusi domain sivustoa varten, niin tehdään uusi virtual host, käynnistetään se ja saitti on maailmalla heti kun nimipalvelimet ovat päivittyneet. Siksi oletin, että alidomain tehdään aivan samalla tavalla ja kaikki on hyvin. En kuitenkaan onnistunut moisessa rutiiniasiassa ja osoite antoikin aivan väärän sivuston. Laitoin Googlen tekemään töitä leipänsä eteen ja jatkuvasti ohjeet neuvoivat samaa mitä minä olin tehnyt. Huomasin myös, että samaa ongelmaa olivat peräänkuuluttaneet aika monet, joten Apache2 ja alidomain ei ilmeisesti ollutkaan aivan läpihuutojuttu. Yhdestä vastauksesta sainkin kupletin juonesta kiinni. Virtual hostin tekeminen on rutiinia. Sen sijaan Apachella on suoritusjärjestys virtual hostien conf-tiedostojen kanssa ja sitä en tiennyt.
Kerrataan vielä miten virtual host tehdään
DNS kuntoon
Virtual host on sama kuin se mitä ymmärretään domainilla sivuston urlissa. Jotta asia olisi hieman sekava, niin itseasiassa www-alku on alidomain (subdomain englanniksi), mutta ne ohjataan virtual hostin conf-tiedostossa samaan. On ymmärrettävä, että molempien on oltava nimipalvelimien tiedossa DNS-tietueiden kautta. Joten A-tietueena on oltava domain.com
, kuin myös www
-alulle on löydyttävä A-tietue. Tuon voi tietysti kiertää @-merkinnällä, joka tarkoittaa sama kuin * eli asteriski; kaikkea tarkoittava jokerimerkki.
Tarkoittaa myös sitä, että kun tekee alidomainin, niin sille on tehtävä A-tietue. Voi käyttää myös tietuetta CNAME, mutta A on tehokkaampi.
Joten DNS-tiedoista on löydyttävä:
A example.com A www.example.com A sub.example.com
Jos DNS on asettamatta, niin on aivan se ja sama millaisia virtual hosteja rakennat: error 404
tulee aina.
Erilliset virtual hostit
Oletan, että osaat tehdä virtual hostien conf-tiedostot. Mutta kerrataan oleellisimmat kohdat tehdään www
-osoitteelle oma, ja sub
-nimiselle alidomainille oma.
domain.com.conf:
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com/html </VirtualHost>
sub.domain.com.conf:
<VirtualHost *:80> ServerName example.com ServerAlias sub.example.com DocumentRoot /var/www/sub.example.com/html </VirtualHost>
Ei takerruta porttiin 80, koska sillä ei ole merkitystä. Monissa ohjeissa laitetaan ServerName
ja ServerAlias
toisinpäin, mutta se on vastoin Apachen manuaaleja. ServerName
on nimenomaan urlin domain-osa, ja ServerAlias
on alidomain. Oudoimmat esimerkit laittoivat ServerName
arvoksi sub.example.com
ja ServerAlias
oli sitten www.sub.example.com
– tuossa ei ole pienintäkään järkeä.
Kaikki on tehty oikein, mutta tuo ei toimi.
Leikitään vielä, että samalta virtuaaliserveriltä löytyy domain.com
niminen sivusto, joka on tehty virtual hostiksi nimellä domain.com.conf
. Kun yrittää antaa selaimessa http://sub.example.com
niin päätyy urliin http://domain.com
.
Syy on valitettavan yksinkertainen ja se on aakkosjärjestys. Tarkemmin sanottuna conf-tiedostonimien aakkosjärjestys.
Apache ei mene läpi kaikkia virtual hostien conf-tiedostoja löytääkseen oikean, vaan lähtee etenemään aakkosjärjestyksessä. Kun selain pyytää urlia ali.example.com
, niin Apache kurkkaa ensimmäiseen, joka on domain.com.conf
. Se ei kelpaa, joten se kurkkaa aakkosjärjestyksessä seuraavaan, joka on example.com.conf
ja löytää sieltä serverin example.com
, jonka alias on www
– mutta kun olisi pitänyt olla ali
. Apache kuitenkin päättää, että koska ali
olisi pitänyt olla ennen, eikä sitä ole löytynyt, niin se luovuttaa ja kääntää serverin oletusdomainille, joka on – yllätysyllätys – conf-tiedostojen aakkosjärjestyksessä ensimmäinen; esimerkissämme domain.com.conf
. Ja hölmistynyt webmaster päätyy aivan väärälle sivustolle.
Oletko koskaan miettinyt miksi oletustiedosto on nimetty 000-default.conf
? Ihan siksi, että se on käytännössä aina ennen muita aakkosissa. Jokaisessa ohjeessahan nimenomaan neuvotaan käyttämään domainin nimeä conf-tiedostossa.
Alidomain lähtee toimimaan, kun sen alidomainin conf-tiedoston nimi on aakkosjärjestyksessä ennen ”päädomainia”.
Kun alidomain sub
on täällä
0.example.com.conf
ja päädomain sekä www
on täällä
1.example.com.conf
niin alidomain sub
toimii. Numerointi on vain yksi tapa. On aivan se ja sama miten nimeää, kunhan alidomainin conf on aina aakkosjärjestyksessä ensin.
Saat selville Apachen marssijärjestyksen näin:
apachectl -t -D DUMP_VHOSTS
Yksi virtual host
Yhdessä conf-tiedostossa voidaan määrittää useampi domain. Se saattaa olla einen hankala ylläpitää, jos asetuksia on paljon, mutta toisaalta – ei niitä koko aikaa olla säätämässä. Toinen seuraus on siinä, että silloin a2dissite
sammuttaa kaikki samassa conf-tiedostossa olevat – toisaalta, se saattaa olla joskus haluttua ja siinä tapauksessa nopea tapa ottaa kaikki versiot pois linjoilta samaan aikaan. Tosin, a2dissite
hyväksyy myös jokerimerkit, joten joka tapauksessa saa kaikki sammutettua kerralla, jos haluaa (ja nimeäminen on tehty helpoksi).
Silloin example.com.conf on tämän tyyppinen:
<VirtualHost *:80> ServerName example.com ServerAlias sub.example.com DocumentRoot /var/www/sub.example.com/html </VirtualHost> <VirtualHost *:80> ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com/html </VirtualHost>
Yhden tiedoston taktiissakin aakkosjärjestys on oleellinen. Jos ne laittaa toisinpäin, niin taaskaan sub.example.com
ei toimi.