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. Public_html-hakemistoa käytettäessä lokitiedostoa ei ole saatavilla, jolloin voi kokeilla kommentoida asetuksia tai pyytää apua helpdeskiltä.

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.

CGI- ja PHP-ohjelmien virheet

CGI- ja PHP-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.

Helpdesk voi tarvittaessa selvittää ongelman erillisestä lokitiedostosta. Aluksi kannattaa kuitenkin tarkistaa kaksi asiaa:

  1. Millään tiedostolla tai hakemistolla ei saa olla käyttöoikeutta 777, jonka SuEXEC estää.
  2. Public_html-hakemistossa PHP-tiedostoilla täytyy olla suoritusoikeus.

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

Viimeiselle riville asetetaan ajettavan ohjelman nimi. PHP-ohjelmia varten tiedoston tulee olla tällainen, jossa PHP-tiedoston nimi on kolmannella rivillä:

#!/bin/bash
echo -e "Content-type: text/plain\r\n\r\n"
export SCRIPT_FILENAME=index.php
/usr/bin/php5-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.