Servidor web NGINX con PHP 8.4

Al utilizar PHP-FPM (FastCGI Process Manager), el motor intérprete de PHP corre como un servicio aparte, el cual puede recibir peticiones a través de un socket TCP/IP o UNIX tradicional.

De esta forma se tienen dos servicios: Nginx para manejar el protocolo HTTP y PHP-FPM para interpretar código PHP. Lo cual resulta más eficiente, ya que se invoca a PHP sólo cuando es necesario y mejora mucho la eficiencia de memoria.

Procesar páginas web NGNIX php-FPM Instalación y optimización de un servidor web con Nginx (I) Cómo configurar múltiples dominios y subdominios en Nginx

Instalación y configuración

Instalamos en Debian 13 el servicio php-fpm y otras extensiones que vamos a necesitar para crear un servidor Dokuwiki:

aptitude install php-fpm php-cli php-mcrypt php-gd php-xml php-mbstring

Algunas órdenes relativas al servicio:

service php8.4-fpm status, start, stop, restart

Configuración de FPM

Su fichero de configuración es /etc/php/8.4/fpm/pool.d/www.conf.

Aunque las opciones que vienen por defecto nos pueden servir para hacer un uso del servidor, algunas de las opciones que podemos modificar son:

Usuario y grupo sobre el que se ejecutará FPM.

Socket desde el que escuchará las peticiones.

Prioridad del proceso.

Número de procesos hijo que se crearán.

Peticiones máximas para cada proceso.

De momento lo dejamos tal como está. Los parámetros de configuración principales podrían quedar de la siguiente forma:

[...]
user = www-data
group = www-data
[...]
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
[...]
pm = dynamic
pm.max_children = 75
pm.start_servers = 3
pm.min_spare_servers = 3
pm.max_spare_servers = 10
[...]

La configuración varía de acuerdo a las necesidades del servidor. En este caso se utilizan como mínimo 3, y como máximo 10, procesos servidores spare (listos para procesar solicitudes); y un máximo de 75, trabajando en modo dinámico (los procesos hijos se crean/matan a medida que son necesarios).

Además se debe especificar el usuario y grupo con los que correrán los procesos hijos: Utilizar el usuario “www-data” por defecto de sistemas Debian y derivados.

Configuración de PHP

A continuación, vamos a ver el fichero de configuración global de PHP. Este fichero se encuentra en /etc/php/8.4/fpm/php.ini.

Entre el gran número de opciones y configuraciones diferentes, vamos a indicar una por motivos de seguridad: Debemos buscar la línea cgi.fix_pathinfo y cambiar el valor por defecto 1 por 0.

Configuración de NGINX

Con esto ya tendríamos la parte de PHP mínimamente configurada, aunque antes de continuar también debemos configurar Nginx para que sea capaz de reconocer y procesar este tipo de webs. Para ello, editamos /etc/nginx/sites-available/default.

Aquí, en el apartado index debemos añadir: index.php. El orden de la lista de archivos index marcará la prioridad. Por ejemplo, si el primero de la lista es el html y este no existe, intentará cargar el siguiente htm y, si no existe, el siguiente php en nuestro caso.

También debemos añadir, o asegurarnos de que está correctamente configurado, dentro de “server”:

index index.php index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
# pass the PHP scripts to FastCGI server
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.4-fpm.sock;
}

Comprobación

El fichero html del servidor web lo copiamos con un nuevo nombre: index.php. Y añadimos en el cuerpo del documento algunos cambios para comprobar que ahora es el primer fichero visualizado en el servidor, según el orden indicado en el apartado anterior.

También añadimos una instrucción en PHP para comprobarlo: En este ejemplo mostrará la información acerca de la versión y configuración del PHP instalado en el servidor.

<?php
phpinfo();
?>