Kapsin logo

Kapsi Internet-käyttäjät ry

WWW-palvelimen tekniset ratkaisut

Tässä ohjeessa on kuvattu Kapsin www-palveluiden tekninen toteutus. Ohjeesta voi olla hyötyä asetusten teossa, tai mikäli haluaa toteuttaa samankaltaisia asioita omalla palvelimella.

Kuormantasaus

Yhdistyksellä on tällä hetkellä kaksi www-palvelinta: Karviainen ja Kirsikka. Verkkosivustot on jaettu näiden kesken siten, että kapsi.fi-osoitteen alaiset sivut palvellaan Karviaiselta ja muut sivustot pääsääntöisesti Kirsikalta. Jako on toteutettu määrittämällä eri sivustoille nimipalveluihin eri ip-osoitteet. Sivustojen jakoa voidaan muuttaa mm. huoltokatkojen vuoksi.

Kummallakin www-palvelimella näkyvät verkon yli NFS:llä samat kotihakemistot kuin Lakalla. Palvelimille pääsee myös kirjautumaan ssh:lla. Se voi olla tarpeen fcgi-ohjelmien sammuttamiseksi kill-komennolla, sekä koska www-palvelinten ohjelmavalikoima on erilainen kuin Lakalla.

FCGI-ohjelmat

FCGI on www-palvelimen rajapinta, jonka kautta se ajaa käyttäjän tekemiä ohjelmia. Se muistuttaa perinteistä CGI-ohjelmaa, mutta toiminnan nopeuttamiseksi FCGI pitää ohjelmat käynnissä jonkin aikaa edellisen sivunlatauksen jälkeen. Näin ohjelman käynnistymiseen kuluva aika ei hidasta verkkosivujen toimintaa.

Tämä voi kuitenkin aiheuttaa päivitysviivettä asetuksia tehtäessä, koska FCGI ei lataa kaikkia tiedostoja uudelleen ennen kuin ohjelma sammuu. Päivitysviiveen voi välttää sulkemalla fcgi-prosessin muutosten jälkeen. Käynnissä olevat ohjelmat näkee www-palvelimilla top-komennolla, jossa sulkeminen tapahtuu k-näppäimellä.

Verkkosivujen lokitiedostot

Kunkin palvelimen Apache kirjoittaa lokitiedostot hakemiston /var/log/apache2 alle. Käyttäjille on ACL:llä annettu lukuoikeus error.log-virhelokeihin, sekä erillisestä pyynnöstä myös access.log:iin.

Lokien luku on helpointa Lakalta ~/sites/domain.com/log-hakemiston kautta. Siellä on linkit polkuun, johon www-palvelinten lokihakemistot on liitetty Lakalla.

Public_html-hakemistosta virhelogeja ei ole saatavilla, koska kaikkien käyttäjien public_html-logit menevät samaan tiedostoon. Logiotteita voi kuitenkin pyytää helpdeskin kautta.

PHP-toteutus

Kapsilla PHP-ohjelmat ajetaan aina käyttäjän omalla tunnuksella. Sen vuoksi www-ohjelmille ei tarvitse erikseen antaa oikeuksia tiedostoonkirjoitukseen. Muilla sivustoilla olevat ohjeet 777-käyttöoikeuksista pitää siis jättää huomiotta.

Apachen SuEXEC on tekniikka, jossa www-palvelin voi tiettyjen ehtojen täyttyessä käynnistää ohjelmia käyttäjän tunnuksella. Tietoturva on tässä erityisen olennaista, jotta tunnuksella ei ajeta muita kuin käyttäjän itse luomia ohjelmia. Sen vuoksi SuEXEC mm. estää ohjelman suorituksen, jos tiedostolle tai hakemistolle on annettu edellämainitut 777-käyttöoikeudet (eli kirjoitusoikeus kaikille).

SuEXEC ei kuitenkaan toimi suoraan Apachen perinteisen mod_php-laajennoksen kanssa, joten PHP-toteutus on tehty FCGI:n kautta.

PHP sites-hakemistossa

Sites-hakemistossa on käytössä php5.fcgi-wrapperi, joka ajaa tiedostot /usr/bin/php5-cgi-tulkilla. Wrapperi luodaan www-hakemiston juureen automaattisesti, ellei samannimistä tiedostoa ole valmiiksi olemassa.

PHP-tiedostojen pyynnöt on ohjattu tälle wrapperille Apachen palvelimenlaajuiseen asetustiedostoon tehdyn Action-asetuksen avulla.

Wrapperilla saavutetaan pieni nopeusetu public_html:n toteutukseen verrattuna, koska fcgi voi käyttää samaa tulkkia eri tiedostoille. Public_html:n kanssa wrapperin asettaminen ylläpidon toimesta ei helposti onnistu Apachen konfiguraation vuoksi.

Wrapperille ohjataan tyypin application/x-httpd-fastphp sivut. Jos php:n haluaa toimimaan jollakin toisella päätteellä sites-hakemistossa, lisätään .htaccess-tiedostoon rivi AddType application/x-httpd-fastphp pääte.

PHP public_html-hakemistossa

Apachen asetuksissa public_html-hakemiston .php-pääte on kytketty fcgid-script-tyyppiin, jolloin tiedostot ajetaan kuten fcgi-skriptit.

Normaalisti php-tiedoston ensimmäiselle riville tarvittaisiin tällöin käytettävän php-tulkin polku. Tämä on kuitenkin kierretty asettamalla binfmt:llä kaikki .php-päätteiset tiedostot ajettavaksi /usr/bin/php5-cgi-tulkilla. PHP-tiedostot voi siten www-palvelimilla ajaa suoraan komennolla ./index.php.

Koska tiedostot ajetaan fcgi-ohjelmina yksittäin, täytyy niille asettaa suoritusoikeus. Asetus 700 on hyvä valinta, koska se mm. estää php-koodin paljastumisen konfiguraatiovirheiden yhteydessä.