Configurare una VPS da soli si può? Io dico di SI, qui l'opinione comune è NO. Ho impiegato oltre due mesi, quindi se non hai mai aperto una shell linux forse vale la pena spendere 200 € per fartela configurare da qualcuno.

Premature end of script headers: index.php

Eccolo qui, niente di più generico come errore. Le cause:


  • formato dei file non linux (\r\n vs. \n)
  • linee vuote alla fine dei file
  • in Perl inizio output script in maniera errata
  • eccessivo consumo di Ram e CPU (RLimitCPU e RLimitMEM)
  • errata configurazione di SuExec (vedi i log relativi)

Quasi tutte queste cause comportano l'errore in maniera permanente, non occasionale.

Nel caso in cui l'errore non è continuo ma a tratti le cause potrebbero essere:

  • query al DB lente
  • esaurimento di memoria (azioni pianificate pesanti)
  • CPU troppo carica (azioni pianificate pesanti)
  • raggiungimento dei limiti imposti dalla virtualizzazione tramite Virtuozzo (vedi gli Alerts)

E' indispensabile dotarsi di un tool di monitoraggio. FlameNetwork mi ha consigliato Munin. Va installato e configurato a dovere (Apache e MySQL sono un po' laboriosi ma ci solo tantissime guide al riguardo).

Personalmente ho verificato che in corrispondenza del "Premature end of script headers" avevo un picco nei processi del MySQL, ho quindi spostato i DB fuori dalla VPS per individuare causa / effetto e purtroppo non era il DB.

Posso suggerirvi:

https://github.com/rackerhacker/MySQLTuner-perl

per verificare l'eventuale presenza di configurazioni non adatte del database che possono far morire gli script.


Ok, se fin qui ci siamo ed ancora il problema rimane c'è da chiedersi se Apache sia configurato a dovere (non bisognava chiederselo all'inizio?). Nel mio caso la risposta era no.

Si apre:

Codice:
vi /etc/httpd/conf/httpd.conf
ed invece di cominciare a toccare cose a caso (come ho fatto un po' io) bisogna individuare tutti i file di configurazione caricati a seguire. Nel mio caso, CentOS 5 + Plesk 8.3, la riga dice:

Codice:
Include conf.d/*.conf
Una cartella che già dovreste conoscere. Il mio Apache gira come PreFork, per capirlo basta fare:

Codice:
> httpd -V | grep MPM

Server MPM:     Prefork
 -D APACHE_MPM_DIR="server/mpm/prefork"
Che sia PreFork, Worker o altro bisogna in ogni caso individuare l'ultimo file di configurazione caricato contenente:

Codice:
<IfModule prefork.c>
...
</IfModule>

<IfModule worker.c>
...
</IfModule>
Nel mio caso era /etc/httpd/conf.d/swtune.conf . Tenete presente che i file vengono caricati in ordine alfabetico.

Bene, individuato il file responsabile della configurazione definitiva del vostro modulo si può cominciare ad operare tenendo sempre sottocchio Munin:

  • più server si attivano più RAM si usa
  • i "busy server" non devono mai raggiungere il totale dei server

Eccola qui, una causa di Premature end of script headers che non ho trovato indicata da nessuna parte.

Non fornisco alcuna indicazione sui valori poichè dipendono da RAM, numero vhost, traffico...