Kapsin logo

Kapsi Internet-käyttäjät ry

Internal Server Error -virheet

Verkkosivujen virhe 500 Internal Server Error tarkoittaa ongelmaa joko .htaccess-asetuksissa tai CGI- tai PHP-ohjelman suorituksessa. Tämä ohje neuvoo virhetilanteen selvittämisessä.

Virheet .htaccess-asetuksissa

Piilotiedosto .htaccess sisältää www-palvelinohjelman toimintaan vaikuttavia asetuksia. Syntaksivirheet tai asetukset, joille ei ole tukea, aiheuttavat virheilmoituksen. Tästä on kyse, jos virheilmoitus ilmenee muulloinkin kuin CGI- tai PHP-sivuja käytettäessä.

Useimmiten .htaccess-asetukset ovat käyttäjän itse tekemiä. Joidenkin ohjelmien asennuspaketeissa tulee kuitenkin valmiina asetustiedosto, jonka kaikki asetukset eivät välttämättä toimi Kapsilla. Tiedoston saa näkyviin komennolla ls -a, ja sitä voi lukea tavallisella tekstieditorilla.

Virheen syy ilmenee error.log-tiedostosta. Erityisen yleinen syy on FollowSymLinks-asetus. Se on korvattu turvallisemmalla FollowSymLinksIfOwnerMatch-asetuksella, joka on oletuksena käytössä. Kyseisen asetuksen voi siis poistaa .htaccess-tiedostosta.

PHP-ohjelmien virheet

PHP-ohjelmien virheet löytyvät error.log-tiedostosta.

CGI-ohjelmien virheet

CGI-ohjelmien virhetilanteissa error.log:in virheilmoitus on usein pelkkä Premature end of script headers. Se tarkoittaa ettei ohjelma tuottanut kunnollista vastausta sivuhakuun. Virhe voi johtua esimerkiksi ohjelman kaatumisesta, tai siitä että SuEXEC estää ohjelman suorituksen käyttöoikeuksien vuoksi.

Käyttöoikeudet

SuEXEC on www-palvelimen ominaisuus, joka suorittaa sovellukset käyttäjän omalla käyttäjätunnuksella. Tietoturvan vuoksi SuEXECissä on varsin tiukat rajoitukset käyttöoikeuksille, eikä ohjelmaa suoriteta jos rajoitukset eivät täyty.

Muut kuin UNIX-rivinvaihdot

Muut kuin UNIX-muotoiset rivinvaihdot aiheuttavat virheen End of script output before headers.

Tekstitiedostot täytyy siirtää käyttäen tiedonsiirto-ohjelman tekstimuoto-toimintoa (ascii) tai varmistaa sed-komennolla että niiden sisältämät rivinvaihdot ovat UNIX-muotoisia:

sed -i $'s/\r$//' tiedosto.cgi

Muiden virheiden selvittäminen wrap.cgi:llä

Muut Premature end of script headers -virheet voi selvittää luomalla samaan hakemistoon wrap.cgi-tiedoston. Tällä ohjataan ohjelman tuottamat virheilmoitukset selaimelle.

#!/bin/bash
echo -e "Content-type: text/plain\r\n\r\n"
./ohjelma.cgi 2>&1

Wrap.cgi:lle annetaan suoritusoikeus ja se avataan selaimessa. Ohjelman tuloste tulee näkyviin, eli joko kunnollinen vastaus tai jokin virheilmoitus esimerkiksi puuttuvasta kirjastosta. Menetelmä ei kuitenkaan sovi FCGI-ohjelmille (PHP).