Nginx 1.4.x en sistemas Unix

Esta documentación cubre la instalación y configuración de PHP con PHP-FPM para un servidor HTTP de Nginx 1.4.x.

En esta guía se asume que se ha construido Nginx desde el código fuente, por lo que todos los ficheros binarios y de configuración están ubicados en /usr/local/nginx. Si este no es el caso y se ha obtenido Nginx a través de otros medios, consúltese la » Wiki de Nginx para traducir este manual a una configuración propia.

Esta guía cubre la configuración básica de un servidor Nginx para procesar aplicaciones de PHP y servirlas en el puerto 80. Se recomienda estudiar la documentación de Nginx y de PHP-FPM para poder optimizar la configuración más allá del ámbito de esta documentación.

Obsérvese que en esta documentación se han reemplazado los números de versión con una 'x' para asegurarse de que sea correcta en el futuro; se han de reemplazar estos con los números de versión correspondiente cuando sea necesario.

  1. Se recomienda visitar la página de » instalación de la Wiki de Nginx para obtener e instalar Nginx en un sistema propio.

  2. Obtener y desempaquetar el código fuente de PHP:

    tar zxf php-x.x.x
    
  3. Configurar y construir PHP. Aquí es donde se personaliza PHP con varias opciones, como qué extensiones se habilitarán. Ejecutar ./configure --help para enumerar las opciones disponibles. En este ejemplo se realiza una configuración sencilla con soporte para PHP-FPM y MySQL.

    cd ../php-x.x.x
    ./configure --enable-fpm --with-mysql
    make
    sudo make install
    
  4. Obtener y mover los ficheros de configuración a sus ubicaciones correctas

    cp php.ini-development /usr/local/php/php.ini
    cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
    cp sapi/fpm/php-fpm /usr/local/bin
    
  5. Es importante prevenir que Nginx pase peticiones al «backend» de PHP-FPM si el fichero no existe, evitando así la inyección arbitraria de scripts.

    Esto se puede corregir estableciendo la directiva cgi.fix_pathinfo a 0 dentro del fichero php.ini.

    Cargar el php.ini:

    vim /usr/local/php/php.ini
    

    Localizar cgi.fix_pathinfo= y modificarla como sigue:

    cgi.fix_pathinfo=0
    
  6. Se debe modificar php-fpm.conf para especificar que php-fpm debe ejecutarse como el usuario www-data y el grupo www-data antes de poder iniciar el servicio:

    vim /usr/local/etc/php-fpm.conf
    

    Buscar y modificar lo siguiente:

    ; Usuario/grupo de procesos de Unix
    ; Nota: El usuario es obligatorio. Si el grupo no se establece, se utilizará
    ;       el grupo predeterminado del usuario.
    user = www-data
    group = www-data
    

    Ahora se puede iniciar el servicio de php-fpm:

    /usr/local/bin/php-fpm
    

    Esta guía no continua configurando php-fpm; si se tiene interés en una configuración mayor de php-fpm, consulte la documentación.

  7. Ahora Nginx debe configurarse para que pueda procesar aplicaciones de PHP:

    vim /usr/local/nginx/conf/nginx.conf
    

    Modificar el bloque de ubicaciones predeterminado para que intente servir ficheros .php:

    location / {
        root   html;
        index  index.php index.html index.htm;
    }

    El siguiente paso es asegurarse de que los ficheros .php se pasan al «backend» de PHP-FPM. Bajo el bloque de ubicaciones predeterminado de PHP comentado, añadir lo siguiente:

    location ~* \.php$ {
        fastcgi_index   index.php;
        fastcgi_pass    127.0.0.1:9000;
        include         fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
    }

    Reiniciar Nginx.

    sudo /usr/local/nginx/sbin/nginx -s stop
    sudo /usr/local/nginx/sbin/nginx
    
  8. Crear un fichero de prueba

    rm /usr/local/nginx/html/index.html
    echo "<?php phpinfo(); ?>" >> /usr/local/nginx/html/index.php
    

    Ahora, navegar a http://localhost. phpinfo() debería mostrarse.

Siguiendo los pasos anteriores se tendrá un servidor web Nginx funcionando con soporte para PHP como módulo SAPI. Por supuesto, existen muchas más opciones de configuración disponibles para Nginx y PHP. Para más información, teclear ./configure --help en el árbol de código fuente correspondiente.