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.
Se recomienda visitar la página de » instalación de la Wiki de Nginx para obtener e instalar Nginx en un sistema propio.
Obtener y desempaquetar el código fuente de PHP:
tar zxf php-x.x.x
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
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
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
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.
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
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.