Nginx es un servidor web de alto rendimiento y proxy escrito en c por Igor Sysoev.
Ha sido diseñado para escenarios muy concretos en los que hay mucha carga de peticiones simultáneas (se han llegado a reportar 50.000 peticiones de éste tipo) y funciona extremadamente bien como proxy de balanceo de carga y de correo.
En post anteriores he comentado cómo instalarlo, ahora comentaré como servir php en fastcgi con él. Usaré la librería spawn-cgi del servidor web lighttpd para levantar el servidor fastcgi que se comunicará con nginx.
- Instalar php
apt-get install php5-cgi
- Instalar los paquetes siguientesnecesarios para nginx
apt-get install zlib1g-dev libssl-dev libpcrecpp0 libpcre3-dev
- Bajar lighttpd, descomprimirlo, configurarlo pero no instalarlo.
tar -xvzf lighttpd-veriónquesea.tar.gz
cd lighttpd-descomprimido
./configure
make
- Copiar la librería spawn-fcgi de lighttpd al directorio de binarios del sistema
cp src/spawn-fcgi /usr/bin/spawn-fcgi
- Bajar nginx, descomprimirlo, configurarlo e instalarlo..
tar -xvzf nginx-veriónquesea.tar.gz
cd nginx-descomprimido
./configure
make
make install
- Arrancar el cgi de php con spawn-fcgi en el puerto 9000, por ejemplo (en ocasiones es necesario especificar el grupo, además del usuario con el que se arranca spawn-fcgi, de lo contrario, puede dar el error “no input file specified”
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000
-u www-data -g www-data -f /usr/bin/php5-cgi
- Crear el archivo fastcgi-params con los siguiente
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
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_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# si hemos configurado php con el parámetro --enable-force-cgi-redirect, debemos añadir:
#fastcgi_param REDIRECT_STATUS 200; - Configuramos nginx con lo siguiente
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /directorio_al_html$fastcgi_script_name;
include /usr/local/nginx/conf/fastcgi_params;
} - Arrancamos nginx
/usr/local/nginx/sbin/nginx