Nginx con php en debian

NginxNewsNginx 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.

  1. Instalar php
    apt-get install php5-cgi
  2. Instalar los paquetes siguientesnecesarios para nginx
    apt-get install zlib1g-dev libssl-dev libpcrecpp0 libpcre3-dev
  3. Bajar lighttpd, descomprimirlo, configurarlo pero no instalarlo.
    tar -xvzf lighttpd-veriónquesea.tar.gz
    cd lighttpd-descomprimido
    ./configure
    make
  4. Copiar la librería spawn-fcgi de lighttpd al directorio de binarios del sistema
    cp src/spawn-fcgi /usr/bin/spawn-fcgi
  5. Bajar nginx, descomprimirlo, configurarlo e instalarlo..
    tar -xvzf nginx-veriónquesea.tar.gz
    cd nginx-descomprimido
    ./configure
    make
    make install
  6. 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
  7. 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;
  8. 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;
    }
  9. Arrancamos nginx
    /usr/local/nginx/sbin/nginx

Sobre Asier

Arquitecto web enganchado al desarrollo, estudio y planteamiento de proyectos en internet. Trabajo en Blackslot, empresa que fundé en el 2009. Me encanta el cine, el café, el sexo, la cultura geek, la cultura oriental y la música electrónica.
Artículo publicado en Desarrollo Web, How-To, PHP, Servidores Web, Sistemas, UNIX / Linux. Enlace a esta entrada..

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos requeridos, están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Notificarme los nuevos comentarios por correo electrónico. Tambien puedes suscribirte sin comentar.