Para usar PHP en NGINX, primero hay que instalar NGINX en el servidor. Lo podemos instalar de la siguiente manera (sustituir zypper por el gestor de paquetes que use el sistema operativo del servidor):
HOST# zypper install nginx
Con NGINX instalado, el siguiente paso es instalar PHP:
HOST# zypper install php7
Nos aseguramos que tengamos instalado el módulo php-fpm. Podemos instalarlo con:
HOST# zypper install php7-fpm
En la ruta /etc/php7/fpm encontraremos un archivo llamado php-fpm.conf.default. Debemos copiarlo hacia un archivo .conf para que php-fpm lo lea y se inicie correctamente. Si no existe el archivo .conf, al iniciar php-fpm veremos errores del tipo "No existe el archivo php-fpm.conf...".
Copiamos el archivo default hacia un archivo con extensión .conf:
HOST# cp php-fpm.conf.default php-fpm.conf
De la misma manera, nos dirigimos hacia la subcarpeta php-fpm.d (/etc/php7/fpm/php-fpm.d) y copiamos el archivo www.conf.default a www.conf:
HOST# cp www.conf.default www.conf
Ahora ya podemos iniciar el servicio php-fpm:
HOST# service php-fpm restart
Es importante prevenir que NGINX pase peticiones al «backend» de PHP-FPM. Esto se puede conseguir estableciendo la directiva cgi.fix_pathinfo a 0 dentro del fichero php.ini.
Primero buscamos la ruta del fichero php.ini en nuestra distribución Linux y versión de php instalada:
HOST# find / -name php.ini /etc/php7/cli/php.ini
Editamos php.ini:
HOST# vi /usr/local/php/php.ini
Localizamos la opción cgi.fix_pathinfo= y la modificamos como sigue:
cgi.fix_pathinfo=0
Una vez hecho esto, toca configurar NGINX para que pueda procesar aplicaciones PHP:
HOST# vi /etc/nginx/nginx.conf
Primero modificamos el bloque de ubicaciones iniciales predeterminado en el archivo nginx.conf para que NGINX intente servir un index.php en caso de que este exista:
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. Descomentar el bloque de ubicaciones predeterminado de PHP y cambiar la siguiente línea:
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
por
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
El bloque php debe quedar de este modo:
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; }
Después de hacer estos cambios, reiniciamos NGINX:
HOST# service nginx restart
Creamos un fichero .php de prueba que contenga <?php phpinfo(); ?> en /srv/www/htdocs/ y navegamos a http://localhost/fichero.php. En este momento, phpinfo() debería mostrarse.
Si hemos seguido los pasos anteriores tendremos un servidor web NGINX funcionando, con soporte para PHP como módulo SAPI.
Fuentes:
https://www.php.net/manual/es/install.unix.nginx.php
https://stackoverflow.com/questions/17808787/file-not-found-when-running-php-with-nginx
https://security.stackexchange.com/questions/177354/turned-on-cgi-fix-pathinfo-still-dangerous...