Gestione php basato su Fastcgi
Mod_fastcgi è un modulo apache che consente ad apache di comunicare con applicazioni abilitate a fastcgi. Può essere utilizzato per eseguire codice php su fastcgi tramite il binario php-cgi che è abilitato per fastcgi.
Fastcgi ha molti miglioramenti rispetto al tradizionale modello cgi di esecuzione di programmi esterni all'interno di un server web. Con fastcgi vengono mantenuti in vita più processi e ogni processo viene riutilizzato per soddisfare più richieste una dopo l'altra. Esistono impostazioni per controllare il numero massimo di richieste che un processo può servire, dopodiché il processo viene terminato e ne viene avviato uno nuovo.
Installa i pacchetti
La prima cosa da fare è installare i pacchetti necessari da synaptic. Abbiamo bisogno di installare il server apache, mod_fastcgi, mpm worker e php insieme al binario cgi. Nota che se hai già installato php con mpm prefork e mod-php, verrà rimosso durante l'installazione di questi pacchetti
$ sudo apt-get install apache2 libapache2-mod-fastcgi apache2-mpm-worker php5 php5-cgi
Su Ubuntu il file di configurazione di apache che si trova in
/etc/apache2/sites-enabled/000-default
Il binario php cgi si trova in /usr/bin/php-cgi.
Configura fastcgi
Dopo aver installato i pacchetti, è il momento di configurare apache per utilizzare mod_fastcgi per eseguire gli script php. Come cgi, anche fastcgi eseguirà processi php usando il binario php-cgi.
Per prima cosa abilita il modulo fastcgi con il comando a2enmod
$ sudo a2enmod fastcgi
Il comando a2enmod copia il file di configurazione del modulo da /etc/apache2/mods-available nella directory /etc/apache2/mods-enabled . Il file di configurazione in questo caso è fastcgi.conf. Sembra così
<IfModule mod_fastcgi.c> AddHandler fastcgi-script .fcgi FastCgiIpcDir /var/lib/apache2/fastcgi </IfModule>
Mod_fastcgi registra un gestore chiamato fastcgi-script con apache. Questo può essere utilizzato per specificare quali programmi eseguire tramite mod_fastcgi.
Ok, andiamo avanti. La prossima cosa è configurare il vhost pertinente per eseguire php usando il gestore fastcgi. Inserisci la seguente configurazione all'interno del blocco vhost desiderato nel file di configurazione di Apache.
<Ifmodule mod_fastcgi.c> FastCgiServer /usr/local/bin/php-fastcgi-wrapper -processes 10 -restart-delay 1 -init-start-delay 1 -pass-header HTTP_AUTHORIZATION Alias /binary /usr/local/bin <Location /binary/php-fastcgi-wrapper> Options ExecCGI SetHandler fastcgi-script </Location> AddHandler php-fastcgi .php Action php-fastcgi /binary/php-fastcgi-wrapper </IfModule>
Il FastCgiServer registra /usr/local/bin/php-fastcgi-wrapper come l'applicazione fastcgi con varie opzioni.
Nota che questo è uno script di shell che lancerà il binario php-cgi con varie impostazioni. Nota che abbiamo chiesto a FastCgiServer di creare e gestire 10 processi.
La riga AddHandler dichiara un nuovo gestore per i file ".php" chiamato php-fastcgi. Questo può essere chiamato a qualsiasi cosa tu voglia.
La linea Action dice ad Apache di gestire il file php-fastcgi usando il programma cgi /cgi-bin/php-fastcgi-wrapper.
Ora la posizione /cgi-bin/php-fastcgi-wrapper non è reale. Per indicare la posizione reale dello script wrapper, viene utilizzata la direttiva Alias. Punta /cgi-bin a /usr/local/bin.
Script wrapper
Ora arriva lo script wrapper che verrà utilizzato da fastcgi per eseguire php.
#!/bin/sh # Set desired PHP_FCGI_* environment variables. # Example: # PHP FastCGI processes exit after 500 requests by default. PHP_FCGI_MAX_REQUESTS=10000 export PHP_FCGI_MAX_REQUESTS PHP_FCGI_CHILDREN=5 export PHP_FCGI_CHILDREN # Replace with the path to your FastCGI-enabled PHP executable exec /usr/bin/php-cgi
Nota l'impostazione PHP_FCGI_CHILDREN. Specifica che ogni processo php dovrebbe eseguire ulteriormente il fork e gestire altri 5 processi php figlio. Quindi prima a fastcgi è stato detto di creare 10 processi. Il totale è 10*5 =50 processi. Ci sono 2 livelli di gestione dei processi in corso. Mod_fastcgi gestisce 10 processi php e ogni processo php gestisce ulteriormente 5 processi ciascuno.
Questo file è archiviato nel percorso seguente
/usr/local/bin/php-fastcgi-wrapper
Assicurati che il file sia eseguibile. Fai un chmod su di esso
/usr/local/bin# chmod +x php-fastcgi-wrapper
La posizione del file non ha importanza. Lo script wrapper è necessario affinché varie opzioni come PHP_FCGI_MAX_REQUESTS possano essere passate al processo php.
Ora riavvia Apache e verifica l'installazione aprendo uno script php nel browser. Visualizza il contenuto della variabile $_SERVER in php. Dovrebbe contenere [FCGI_ROLE] => RESPONDER . Questo indica che fastcgi è in azione.
Controllare anche la tabella dei processi utilizzando htop o System Monitor. Dovresti vedere 50 processi php-cgi in esecuzione.
Risorsa
http://www.fastcgi.com/drupal/node/25
http://www.opensource.apple.com/source/apache_mod_php/apache_mod_php-12/php/sapi/cgi/README.FastCGI