Gestor de Procesos PHP FastCGI - PHP-FPM ⋆ ALexHost SRL

Pon a prueba tus habilidades en todos nuestros servicios de Hosting y ¡obtén un 15% de descuento!

Utiliza el código al pagar:

Skills
18.12.2024
No categories

Gestor de Procesos PHP FastCGI – PHP-FPM

Introducción a PHP-FPM

PHP es uno de los lenguajes de programación más utilizados para el desarrollo web. Cuando se trata de manejar grandes volúmenes de tráfico de manera eficiente, el rendimiento de PHP puede afectar significativamente a la velocidad general y la capacidad de respuesta de los sitios web. Aquí es donde entra en juego PHP FastCGI Process Manager (PHP-FPM). PHP-FPM es un gestor de PHP alternativo ampliamente adoptado que proporciona un método de alto rendimiento para ejecutar scripts PHP.

En este artículo, nos adentraremos en qué es PHP-FPM, por qué es esencial para optimizar el rendimiento del servidor web y cómo configurarlo para tus aplicaciones basadas en PHP.

¿Qué es PHP-FPM?

PHP-FPM, o PHP FastCGI Process Manager, es una implementación de FastCGI para scripts PHP. FastCGI es un protocolo usado para mejorar el rendimiento de los servidores web manejando las peticiones más eficientemente que el estándar CGI (Common Gateway Interface). Mientras que CGI crea un nuevo proceso para cada petición (lo que lleva a un alto consumo de recursos), FastCGI mantiene un grupo de procesos de trabajo listos para manejar múltiples peticiones, reduciendo así la sobrecarga.

PHP-FPM añade una capa de gestión de procesos sobre FastCGI, permitiendo características como la agrupación de procesos, la generación de trabajadores bajo demanda, el apagado graceful y la capacidad de manejar entornos de alto tráfico con facilidad. Ahora es el manejador PHP estándar de facto para muchos servidores web modernos, incluyendo NGINX y Apache.

¿Por qué usar PHP-FPM?

  1. Rendimiento mejorado: PHP-FPM puede manejar más peticiones concurrentes con menos recursos, reduciendo la carga del servidor y acelerando los tiempos de respuesta. Esto es especialmente beneficioso para sitios web de alto tráfico o aplicaciones que experimentan picos repentinos de tráfico.
  2. Gestión de procesos: PHP-FPM permite una gestión precisa de los procesos, dándole el control sobre cómo PHP gestiona las peticiones. Utiliza un grupo de trabajadores que puede ajustarse para adaptarse a la carga de trabajo esperada, asegurando un uso eficiente de los recursos del servidor.
  3. Mejor utilización de recursos: Dado que PHP-FPM agrupa procesos, puede servir múltiples peticiones usando los mismos workers, minimizando la necesidad de crear y terminar procesos continuamente. Esto mejora el uso de la memoria y la eficiencia de la CPU.
  4. Degradación Graciosa: Cuando se configura adecuadamente, PHP-FPM puede degradarse con gracia reduciendo el número de procesos activos si el servidor se satura, previniendo una caída completa.
  5. Características avanzadas: PHP-FPM incluye características avanzadas como slow-log para depuración, desove adaptativo de procesos, y reportes de estado, los cuales proveen información sobre el desempeño y salud de sus aplicaciones PHP.

Características principales de PHP-FPM

  • Pools de Procesos: PHP-FPM le permite definir múltiples pools de procesos PHP worker. Cada grupo puede ser configurado con diferentes parámetros, permitiéndole ejecutar diferentes aplicaciones PHP con diferentes requerimientos de tráfico en el mismo servidor.
  • Generación Adaptativa de Procesos: PHP-FPM puede escalar automáticamente el número de procesos trabajadores basándose en los niveles de tráfico. Comienza con un número mínimo de trabajadores y puede incrementar el tamaño del pool cuando sea necesario, sin desperdiciar recursos durante periodos de bajo tráfico.
  • Registro lento: La función de registro lento de PHP-FPM registra las peticiones que superan un tiempo de ejecución predefinido. Esto ayuda a los desarrolladores a identificar y resolver los cuellos de botella de rendimiento en su código PHP.
  • Página de estado: PHP-FPM proporciona una página de estado integrada que proporciona información en tiempo real sobre el estado del pool, trabajadores activos, trabajadores inactivos y otras métricas que pueden ser usadas para monitorizar el rendimiento.
  • Apagado Gracioso: PHP-FPM puede terminar procesos con gracia, permitiendo que las peticiones en curso se completen antes de apagarse. Esto previene la terminación abrupta de scripts en ejecución, asegurando una mejor experiencia de usuario.

Cómo funciona PHP-FPM

PHP-FPM opera como un servidor FastCGI independiente que se integra con un servidor web, como NGINX o Apache, para servir scripts PHP. Cuando entra una petición, el servidor web reenvía la petición PHP al servicio PHP-FPM, que gestiona un grupo de procesos de trabajo para ejecutar el código PHP y enviar el resultado de vuelta al servidor web para su entrega al cliente.

A continuación se muestra un flujo simplificado de cómo PHP-FPM maneja una solicitud:

  1. Petición del cliente: Un usuario solicita una página web que contiene código PHP.
  2. El servidor web recibe la petición: El servidor web (NGINX o Apache) recibe la petición y la reenvía al servicio PHP-FPM usando el protocolo FastCGI.
  3. El trabajador PHP-FPM procesa la petición: Uno de los procesos de trabajo en el grupo PHP-FPM maneja la solicitud, ejecuta el script PHP, y devuelve la salida.
  4. Respuesta devuelta: El servidor web recibe la salida y la envía de vuelta al cliente como el HTML final renderizado.

Instalación y configuración de PHP-FPM

Paso 1: Instalación de PHP-FPM

Para la mayoría de las distribuciones de Linux, PHP-FPM puede ser instalado a través de los gestores de paquetes. Aquí están los comandos para sistemas comunes:

# Para Debian/Ubuntu
sudo apt update
sudo apt install php-fpm
# Para CentOS/RHEL
sudo yum install php-fpm

Una vez instalado, puede iniciar el servicio PHP-FPM:

sudo systemctl start php-fpm

Paso 2: Configuración de Pools PHP-FPM

El archivo de configuración principal para PHP-FPM se encuentra típicamente en /etc/php/7.x/fpm/pool.d/ o /etc/php-fpm.d/ dependiendo de su distribución y versión de PHP. Cada pool se define en su propio archivo, normalmente con el nombre del sitio web o aplicación a la que sirve. Este es un ejemplo de configuración para un pool:

[www]
usuario = www-datos
grupo = www-data
listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dinámico
pm.max_children = 50
pm.servidores_inicio = 5
pm.servidores_mínimos = 5
pm.servidores_máximos = 10
pm.max_peticiones = 500

  • pm = dinámico: El gestor de procesos puede ajustar dinámicamente el número de procesos trabajadores en función de la demanda.
  • pm.max_children: El número máximo de procesos de trabajador que se pueden generar para atender peticiones.
  • pm.start_servers: El número de procesos de trabajo que se inician cuando PHP-FPM es lanzado.
  • pm.min_spare_servers y pm.max_spare_servers: Definen el número mínimo y máximo de trabajadores ociosos, permitiendo a PHP-FPM escalar recursos en función de la carga.
  • pm.max_requests: El número máximo de peticiones que un trabajador puede manejar antes de ser terminado y reemplazado. Esto ayuda a prevenir fugas de memoria en scripts de larga ejecución.

Paso 3: Configurar el servidor web para usar PHP-FPM

Para NGINX:

En el archivo de configuración de NGINX (por ejemplo, /etc/nginx/sites-available/example.com), configure PHP-FPM como gestor de PHP:

servidor {
listen 80;
nombre_servidor ejemplo.com;
root /var/www/html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include fragmentos/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
}

Para Apache:

Para habilitar PHP-FPM en Apache, asegúrese de que el módulo mod_proxy_fcgi está habilitado:

sudo a2enmod proxy_fcgi setenvif

A continuación, actualice la configuración del host virtual de Apache:


ServerName ejemplo.com
DocumentRoot /var/www/html

SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"

Paso 4: Prueba de la configuración

Después de configurar PHP-FPM y su servidor web, reinicie los servicios para aplicar los cambios:

# Para NGINX
sudo systemctl restart nginx

# Para Apache
sudo systemctl restart apache2

Para verificar que PHP-FPM está funcionando, cree un archivo phpinfo.php en el directorio raíz de su web:

php
phpinfo();
?>

Visite el archivo en su navegador (por ejemplo, http://example.com/phpinfo.php) para ver si PHP-FPM aparece como manejador.

Conclusión

PHP-FPM es una herramienta esencial para optimizar el rendimiento de PHP, particularmente para sitios web de alto tráfico. Provee beneficios significativos sobre los manejadores PHP tradicionales al manejar eficientemente los procesos, mejorando la utilización de los recursos del servidor, y ofreciendo características avanzadas como escalamiento adaptativo de procesos y registro lento. Configurando PHP-FPM para satisfacer sus necesidades específicas, puede asegurarse de que sus aplicaciones PHP se ejecutan sin problemas y de manera eficiente, incluso bajo cargas pesadas.

Siguiendo los pasos de esta guía, debería estar bien encaminado para configurar y optimizar PHP-FPM para sus proyectos basados en PHP.

Pon a prueba tus habilidades en todos nuestros servicios de Hosting y ¡obtén un 15% de descuento!

Utiliza el código al pagar:

Skills