====== Servidor web NGINX con PHP 8.4 ======
{{ doc:tec:net:web_nginx_php:php_logo.png?nolink |}}
\\
* 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.
\\
- [[https://www.redeszone.net/2016/12/02/procesar-paginas-web-php-nginx-fpm/|Procesar páginas web NGNIX php-FPM]]
- [[https://elbauldelprogramador.com/instalacion-optimizacion-servidor-web-nginx-i/|Instalación y optimización de un servidor web con Nginx (I)]]
- [[https://geekytheory.com/como-configurar-multiples-dominios-y-subdominios-en-nginx|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.
\\