Configurar PHP-FPM para WordPress en Nginx

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
  • OPcache: En php.ini active y ajuste parámetros de memoria.
  • Cache de Objetos: Emplee plugins como Redis Object Cache o Memcached.

7. Seguridad Adicional

  • Instale Lets Encrypt para HTTPS con Certbot.
  • Deshabilite PHP execution en directorios de subida:
  • location ~ /wp-content/uploads/..php {
        deny all
    }
  • Utilice fail2ban para proteger SSH y peticiones HTTP sospechosas.

8. Pruebas y Troubleshooting

  • Verifique los logs de Nginx: /var/log/nginx/error.log y access.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 🙂



Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *