Optimización de PHP-FPM para servidores web
PHP-FPM (FastCGI Process Manager) es una implementación de PHP diseñada para manejar grandes cargas de tráfico con eficiencia. Configurar adecuadamente PHP-FPM puede marcar una gran diferencia en el rendimiento de tus aplicaciones web. A continuación, exploraremos cómo ajustar los archivos de configuración php.ini
y www.conf
para optimizar PHP 8.2 en diferentes entornos de servidor.
Configuración del Archivo php.ini
El archivo php.ini
es crucial para definir el comportamiento general de PHP en tu servidor. Este archivo controla la cantidad de recursos que puede usar PHP, cómo maneja los errores y qué módulos están habilitados. A continuación se muestra un ejemplo de configuración optimizada para un servidor con 4 CPUs y 8GB de RAM.
Ruta del archivo: /etc/php/8.2/fpm/php.ini
; PHP General Settings
memory_limit = 256M
max_execution_time = 60
max_input_time = 60
post_max_size = 16M
upload_max_filesize = 16M
; Error Handling
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
log_errors = On
error_log = /var/log/php8.2-fpm/error.log
; Data Handling
max_input_vars = 1000
; Session Settings
session.save_handler = files
session.save_path = /var/lib/php/sessions
session.gc_maxlifetime = 1440
session.gc_probability = 1
session.gc_divisor = 100
; File Upload Settings
file_uploads = On
upload_tmp_dir = /var/lib/php/uploads
max_file_uploads = 20
; OPcache Settings
opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 2
opcache.validate_timestamps = On
opcache.max_wasted_percentage = 5
; Security Settings
expose_php = Off
cgi.fix_pathinfo = 0
Explicación de las Configuraciones:
Cada parámetro en este archivo tiene un propósito específico que puede afectar significativamente el rendimiento de PHP:
memory_limit
: Establece un límite de memoria para evitar que los scripts consuman recursos excesivos, lo cual es crucial para mantener la estabilidad del servidor.max_execution_time
ymax_input_time
: Estos parámetros previenen que los scripts defectuosos o lentos agoten los recursos del servidor, asegurando que las solicitudes se procesen en un tiempo razonable.opcache
: OPcache es una herramienta esencial para mejorar el rendimiento de PHP, ya que almacena en caché los scripts PHP compilados, reduciendo el tiempo de carga.expose_php
: Deshabilitarexpose_php
es una medida de seguridad para evitar que los atacantes potenciales vean la versión de PHP que estás utilizando.
Configuración del Archivo www.conf
El archivo www.conf
define cómo PHP-FPM gestiona los procesos. Este archivo es crucial para ajustar el rendimiento según los recursos disponibles en tu servidor. A continuación, se muestra un ejemplo optimizado para un servidor con 4 CPUs y 8GB de RAM.
Ruta del archivo: /etc/php/8.2/fpm/pool.d/www.conf
[www]
user = www-data
group = www-data
listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
; Number of child processes to be created by the master process
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500
; Timeouts
request_terminate_timeout = 300
request_slowlog_timeout = 5s
slowlog = /var/log/slow.log
; Performance Settings
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
; Logging
access.log = /var/log/access.log
error_log = /var/log/error.log
log_level = notice
; Security Settings
listen.backlog = 1024
listen.allowed_clients = 127.0.0.1
Explicación de las Configuraciones:
Este archivo contiene parámetros críticos que afectan cómo PHP-FPM maneja las solicitudes y administra los procesos:
pm.max_children
: Define el número máximo de procesos hijo que PHP-FPM puede crear. Este valor debe ajustarse según la cantidad de CPUs y la memoria disponible.pm.start_servers
,pm.min_spare_servers
,pm.max_spare_servers
: Estos parámetros controlan cuántos procesos se inician al arrancar y cuántos procesos inactivos se mantienen en espera para manejar nuevas solicitudes, lo que permite un uso eficiente de los recursos.request_terminate_timeout
: Establece un límite para la duración de las solicitudes, evitando que un solo script pueda bloquear recursos indefinidamente.slowlog
: Este parámetro es útil para registrar scripts que están tardando demasiado en ejecutarse, lo que ayuda a identificar problemas de rendimiento.
Parámetros Adicionales para un Rendimiento Óptimo
Además de las configuraciones básicas, es importante ajustar otros parámetros para mejorar la eficiencia y seguridad de PHP-FPM:
client_body_timeout = 30s;
client_header_timeout = 30s;
keepalive_timeout = 65s;
send_timeout = 30s;
client_body_buffer_size = 16k;
client_header_buffer_size = 4k;
client_max_body_size = 8m;
large_client_header_buffers = 4 8k;
Estos ajustes permiten manejar mejor las solicitudes de clientes lentos, optimizar el uso de buffers y mantener un equilibrio entre rendimiento y consumo de recursos.
Conclusión
La correcta configuración de PHP-FPM puede tener un impacto significativo en el rendimiento y la estabilidad de tus aplicaciones web. Al ajustar los archivos php.ini
y www.conf
según las necesidades de tu servidor y las características de tus aplicaciones, puedes garantizar una mejor utilización de los recursos disponibles y una experiencia de usuario más fluida.
Si quieres ver como configurar tu servidor de aplicaciones nginx para tu web o ecommerce visita nuestra otra entrada.