tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

Apache2 ja alidomain

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.