Instalar Nginx en ubuntu con soporte PHP5 (php5-fpm)

Hace no mucho hice el cambio de apache a Nginx en un servidor. La impresión general es del todo favorable. Aunque no era un servidor especialmente cargado, sí que en temas de memoria he podido apreciar que tengo mas espacio disponible para otras cosas.

Vamos por pasos. Lo primero, es ponerse el repositorio de Nginx. Tenemos un repositorio estable y otro de desarrollo.

Si queremos el repositorio de nginx estable:
sudo su -
echo "deb http://ppa.launchpad.net/nginx/stable/ubuntu lucid main" >> /etc/apt/sources.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
apt-get update
apt-get install nginx

Si queremos el repositorio de nginx de desarrollo:
sudo su -
echo "deb http://ppa.launchpad.net/nginx/development/ubuntu lucid main" >> /etc/apt/sources.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
apt-get update
apt-get install nginx

Para poner php5-fpm, tenemos 2 opciones. el paquete php5-fpm estará ya disponible para descarga en Maverick Merkaat (Ubuntu 10.10). Si no, siempre podremos usar los repositorios de dotdeb e instalarlo:

sudo su -
echo "deb http://php53.dotdeb.org stable all" >> /etc/apt/sources.list
apt-get update
apt-get install php5-cli php5-common php5-suhosin php5-fpm php5-cgi

Ahora editamos la configuración inicial del primer host de Nginx, en /etc/nginx/sites-available/default

server {
listen   80 default;
server_name  localhost aaa.bbb.ccc.ddd;
access_log  /var/log/nginx/access.log;## Raiz del sitio
location / {
root   /var/www;
index  index.php;
}

## Tratamiento especial para algunos archivos estaticos
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
access_log        off;
expires           30d;
root /var/www;
}

## Con esto procesamos los php de /var/www
location ~ .php$ {
fastcgi_split_path_info ^(.+.php)(.*)$;
fastcgi_pass   backend;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
include fastcgi_params;
fastcgi_param  QUERY_STRING     $query_string;
fastcgi_param  REQUEST_METHOD   $request_method;
fastcgi_param  CONTENT_TYPE     $content_type;
fastcgi_param  CONTENT_LENGTH   $content_length;
fastcgi_intercept_errors        on;
fastcgi_ignore_client_abort     off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}

## Cortar el acceso a .htaccess y .htpassword
location ~ /.ht {
deny  all;
}
}
upstream backend {
server 127.0.0.1:9000;
}

OJO: la directiva default después del puerto de escucha indica que es el vhost al que se acudirá en ausencia de configuración válida. Esto significa que, si de todos los vhost que tengamos configurados, ninguno coincide con el server_name, será éste el que se sirva.

Una vez configurado el host, escribimos algo de codigo php en el raiz del sitio en/var/www/index.php y reiniciamos Nginx y php5-fpm:

sudo su -
service nginx restart; service php5-fpm restart;

Debemos tener en cuenta que Nginx dispone de una acción configtest en su script de inicio de init.d, que nos permitirá validar los cambios antes de aplicarlos. (Esto será muy útil al principio hasta que terminemos de hacernos a la nueva sintaxis de configuración de Nginx)