L’inclusione di PHP-FPM all’interno della nuova versione di Php apre finalmente scenari di utilizzo in produzione per FastCGI Process Manager. PHP-FPM è una modalità di gestione dei processi Fastcgi innovativa rispetto al modello classico. FPM consente di avviare e regolare dinamicamente una serie di processi Fastcgi permettendo utilizzi più evoluti ed ottimizzati delle istanze.
Il seguente articolo ci accompagnerà nell’installazione e nella configurazione del web server Nginx con PHP-FPM su una distribuzione Debian 5.0 Lenny. La configurazione di Php indicata nell’articolo è di tipo base e non tiene conto di eventuali estensioni per la gestione di immagini, compressione dei contenuti etc, che potranno essere comunque aggiunte con una ricompilazione dei sorgenti.
Installiamo i pacchetti che ci serviranno per le operazioni di compilazione :
# apt-get -y install build-essential autoconf2.13 automake libxml2-dev
Per portare correttamente a termine la compilazione di Php con supporto PHP-FPM è necessaria l’installazione della libreria libevent :
# wget http://www.monkey.org/~provos/libevent-1.4.12-stable.tar.gz
# tar zxf libevent-1.4.12-stable.tar.gz
# cd libevent-1.4.12-stable
# ./configure && make && make install
Dopo aver installato libevent riportiamoci nella directory superiore :
# cd ..
e preleviamo l’archivio dei sorgenti per Php 5.3.3. Dopo aver estratto l’archivio, avviamo la procedura di compilazione e la successiva installazione :
# wget http://www.php.net/get/php-5.3.3.tar.gz/from/it.php.net/mirror
# tar zxf php-5.3.3.tar.gz
# cd php-5.3.3
# ./buildconf --force
# ./configure --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data
# make && make install
All’interno della directory php-5.3.3/sapi è contenuto lo script che utilizzeremo per init.d su Debian. Copiamo il file nella directory /etc/init.d, impostiamone i permessi e configuriamolo :
# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
# chmod 755 /etc/init.d/php-fpm
# update-rc.d php-fpm defaults
E’ la volta ora del file di configurazione per PHP-FPM. Un file di template è già contenuto all’interno della directory /usr/local/etc, copiamone il contenuto in un nuovo file che collocheremo nella stessa directory ma che denomineremo php-fpm.conf :
# mv /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
Apriamo in scrittura il file appena creato e decommentiamo le seguenti direttive :
# vim /usr/local/etc/php-fpm.conf
pid = /usr/local/var/run/php-fpm.pid error_log = /usr/local/var/log/php-fpm.log log_level = notice daemonize = yes [www] listen = 127.0.0.1:9000 user = www-data group = www-data
La logica di funzionamento di PHP-FPM è simile a quella dei processi di Apache nella versione prefork. E’ possibile definire quanti processi figli avviare, il numero massimo di processi figli avviabili, ed il numero minimo di child che verranno mantenuti attivi da PHP-FPM. Decommentiamo quindi anche le seguenti righe, impostando i valori in modo coerente rispetto alle risorse del sistema in uso :
pm = dynamic pm.max_children = 40 pm.start_servers = 10 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500
Al termine della configurazione, chiudiamo il file ed avviamo PHP-FPM :
# /etc/init.d/php-fpm start
Copiamo inoltre il file di configurazione php.ini-production in /usr/local/lib/php.ini :
# cp php.ini-production /usr/local/lib/php.ini
E’ arrivato il momento di installare Nginx :
# apt-get install nginx
Dopo l’installazione del pacchetto, apriamo il file contenente la configurazione per il virtual host di default di Nginx :
# vim /etc/nginx/sites-available/default
e inseriamo i seguenti valori all’interno del blocco server { } :
server {
...
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
include fastcgi_params;
}
...
}
valori che indicano come Nginx dovrà gestire le richieste per i contenuti dinamici Php che verranno passate ai processi PHP-FPM in ascolto sulla porta 9000, sull’indirizzo di localhost 127.0.0.1
Al termine della configurazione è possibile testare il corretto funzionamento del setup :
# echo '<?php phpinfo(); ?>' > /var/www/index.php
dopo aver riavviato Nginx :
# /etc/init.d/nginx restart
punteremo il browser all’indirizzo ip del nostro web server http://IP/index.php, se tutto è andato per il verso giusto otterremo una schermata generata dalla funzione phpinfo() riportante informazioni di compilazione e di runtime per Php.


Pingback: Installare XCache su PHP 5.3.3 (PHP-FPM) | SERVERMANAGED.IT ::
Pingback: Lighttpd con PHP-FPM su Debian Lenny | SERVERMANAGED.IT ::
Pingback: Installare APC su PHP-FPM (5.3.3) | SERVERMANAGED.IT ::
Pingback: Installiamo Roundcube su Nginx | SERVERMANAGED.IT ::
Pingback: Nginx con PHP-FPM su Debian 6 Squeeze « Servizi managed e gestione server – servermanaged.it blog