Contents
Introducción
La combinación de Nginx con PHP-FPM se ha consolidado como una de las soluciones más eficientes y escalables para servir aplicaciones basadas en PHP, especialmente WordPress. PHP-FPM (FastCGI Process Manager) optimiza la ejecución de scripts PHP, mientras que Nginx aporta un servidor web de alto rendimiento y bajo consumo de memoria.
Pre-requisitos
- Un servidor Linux (Debian, Ubuntu, CentOS, etc.) con acceso root o sudo.
- Una instalación limpia de Nginx.
- PHP 7.x o 8.x instalados junto con PHP-FPM.
- Base de datos MySQL o MariaDB con un usuario y base de datos para WordPress.
- Conocimiento básico de la terminal Linux y edición de archivos de configuración.
1. Instalación de Nginx
En distribuciones basadas en Debian/Ubuntu:
sudo apt update
sudo apt install nginx
Verifique el estado con:
sudo systemctl status nginx
2. Instalación de PHP-FPM
En Debian/Ubuntu:
sudo apt install php-fpm php-mysql php-xml php-gd php-curl php-zip
Confirme que el servicio PHP-FPM está activo:
sudo systemctl status php7.4-fpm # Ajustar versión si es necesario
Referencias:
3. Configuración de Pool en PHP-FPM
El archivo principal de configuración de pools suele encontrarse en /etc/php/7.x/fpm/pool.d/www.conf
. Ajuste según versión:
- user y group: Definir owner de procesos.
- listen: socket Unix o puerto TCP.
- pm: dinámica, estática o ondemand.
- pm.max_children: número máximo de procesos.
[www]
user = www-data
group = www-data
listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
Ajustes de logging
php_admin_value[error_log] = /var/log/php7.4-fpm.log
php_admin_flag[log_errors] = on
Después de editar:
sudo systemctl reload php7.4-fpm
4. Configuración de Nginx para WordPress
Edite o cree un bloque de servidor en /etc/nginx/sites-available/wordpress
:
server {
listen 80
server_name ejemplo.com www.ejemplo.com
root /var/www/wordpress
index index.php index.html index.htm
# Regla de acceso
location / {
try_files uri uri/ /index.phpargs
}
# Procesamiento de PHP
location ~ .php {
include fastcgi_params
fastcgi_split_path_info ^(. .php)(/. )
fastcgi_param SCRIPT_FILENAME document_rootfastcgi_script_name
fastcgi_pass unix:/run/php/php7.4-fpm.sock
fastcgi_index index.php
}
# Seguridad: denegar acceso a .ht
location ~ /.ht {
deny all
}
# Cache headers para contenido estático
location ~ .(jpgjpegpnggifcssjssvgico) {
expires max
log_not_found off
}
}
Habilite el sitio y recargue:
sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
sudo nginx -t # Verificar sintaxis
sudo systemctl reload nginx
5. Permisos y Propietarios
Asegure que los permisos sean correctos:
sudo chown -R www-data:www-data /var/www/wordpress
sudo find /var/www/wordpress -type d -exec chmod 755 {}
sudo find /var/www/wordpress -type f -exec chmod 644 {}
6. Ajustes de Rendimiento
- GZIP Compression: En
nginx.conf
active gzip:
gzip on
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml rss text/javascript
php.ini
active y ajuste parámetros de memoria.7. Seguridad Adicional
- Instale Lets Encrypt para HTTPS con Certbot.
- Deshabilite PHP execution en directorios de subida:
location ~ /wp-content/uploads/..php {
deny all
}
8. Pruebas y Troubleshooting
- Verifique los logs de Nginx:
/var/log/nginx/error.log
yaccess.log
. - Revise logs de PHP-FPM:
/var/log/php7.4-fpm.log
. - Compruebe permisos y rutas en
fastcgi_param SCRIPT_FILENAME
. - Use
curl -I ejemplo.com
para inspeccionar cabeceras.
Conclusión
Configurar PHP-FPM con Nginx para nuestra instalación de WordPress puede parecer complejo al principio, pero siguiendo los pasos adecuados se logra un entorno robusto, seguro y de alto rendimiento. La correcta configuración de los procesos PHP y las reglas de Nginx asegurará tiempos de respuesta mínimos y un consumo de recursos optimizado. Para más detalles técnicos, consulte la documentación oficial de WordPress y la guía avanzada de Nginx.
|
Acepto donaciones de BAT's mediante el navegador Brave 🙂 |