Configuraciones básicas NGINX contra PHP en FastCGI/spawn-fcgi


Instalar binario de spawn-fcgi

Instalamos el paquete spawn-fcgi con yum o apt-get:

# apt-get install spawn-fcgi
# yum install spawn-fcgi

Nota: en Ubuntu 8.04 no está disponible el paquete spawn-fcgi, pero lo provee lighttpd:

# apt-get install lighttpd
# update-rc.d -f lighttpd remove
# /etc/init.d/lighttpd stop

Después, realizamos la configuración, creando un servicio/script de parada/arranque de spawn de procesos PHP5-CGI:

# cat /etc/init.d/spawn-fcgi

#! /bin/sh

set -e

export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"

case "$1" in
  start)

        echo "Arrancando spawn-fcgi..."
        # Nota: variar -C XXX (número de procesos PHP concurrentes) 
        # según sea necesario para soportar carga de la web.
        /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 20 \
                            -u www-data -g www-data \
                            -f /usr/bin/php5-cgi \
                            -P /var/run/fastcgi-php.pid
	;;
  stop)
        echo "Parando spawn-fcgi..."
        killall php5-cgi
        sleep 5
        killall -9 php5-cgi
	;;

  restart)
	$0 stop
        $0 start
	;;

  *)
        echo "Usage: $0 {start|stop|restart}"
	exit 1
esac

exit 0

Ahora damos permisos de ejecución y arranque con el sistema al script:

### Para Debian/Ubuntu:

# chmod +x /etc/init.d/spawn-fcgi
# update-rc.d spawn-fcgi defaults

Nótese que para spawn-fcgi (que lanza php5-cgi) en Debian tendremos que modificar las opciones de PHP en el php.ini de php5-cgi, no en el php5-apache.


Configuración de Proxypass contra FastCGI

Con los binarios de PHP "escuchando" en el puerto 9000 gracias a spawn-fcgi, podemos realizar los proxypass de PHP contra este puerto en lugar de contra apache:

server {
    listen   80;
    server_name dominio.com;

    access_log  /var/log/nginx/dominio.access.log;
    root   /var/www/dominio/;
    index  index.php index.html;

    # Scripts en PHP:
    location ~ "\.php$" {
       fastcgi_pass   127.0.0.1:9000;
       fastcgi_index  index.php;
       fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
       include /etc/nginx/fastcgi_params;
    }
}



<Volver a Página de NGINX>