UA-51298262-10 Skip to main content
WordPress

FastCGI Cache en Nginx para WordPress: Guía Completa

By septiembre 16, 2026No Comments
FastCGI Cache en Nginx para WordPress: Guía Completa

Qué es FastCGI Cache en Nginx y por qué usarlo en WordPress

Quieres acelerar tu WordPress sin instalar plugins de caché. Pues la combinación de FastCGI Cache con Nginx es, probablemente, la solución más eficiente que vas a encontrar. Los plugins tipo WP Super Cache o W3 Total Cache trabajan a nivel de PHP; FastCGI Cache no. Almacena en disco o memoria las respuestas HTML que PHP-FPM ya generó, y Nginx sirve la página directamente. Sin ejecutar ni una línea de PHP. Sin tocar la base de datos.

¿Y eso se nota? Mucho. Puede bajar el tiempo de respuesta de 800 ms a menos de 50 ms, soportar cientos de peticiones concurrentes en un VPS modesto y dejar el procesador PHP casi ocioso. No es casualidad que muchos hostings gestionados de alto rendimiento usen exactamente esta arquitectura.

Dato clave: FastCGI Cache actúa en la capa del servidor, por delante de PHP. Esto lo hace más rápido que cualquier plugin de caché de WordPress y elimina el consumo de CPU asociado a cada visita cacheada.

Requisitos previos para configurar FastCGI Cache Nginx

Poco que decir aquí. Necesitas:

  • Un servidor Linux (Ubuntu, Debian o CentOS) con Nginx instalado como servidor web.
  • PHP gestionado mediante PHP-FPM. Imprescindible: FastCGI Cache cachea las respuestas de PHP-FPM, así que sin él no hay nada que cachear.
  • Acceso root o sudo para editar la configuración de Nginx.
  • WordPress funcionando sobre ese stack.

Verificar tu configuración actual de PHP-FPM

Antes de tocar nada, localiza cómo se comunican Nginx y PHP-FPM. Revisa el bloque location ~ \.php$ de tu configuración. Lo habitual es algo como fastcgi_pass unix:/run/php/php8.1-fpm.sock; o una conexión por puerto 127.0.0.1:9000. Anota ese valor. Lo necesitarás enseguida.

Paso 1: Definir la zona de caché en Nginx

Lo primero es declarar una zona de memoria compartida que Nginx usará para indexar la caché. Edita el archivo de configuración principal o crea un archivo incluido, por ejemplo /etc/nginx/conf.d/fastcgi-cache.conf:

fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=WORDPRESS:100m max_size=1g inactive=60m use_temp_path=off;
fastcgi_cache_key «$scheme$request_method$host$request_uri»;

Vamos por partes:

  • /var/cache/nginx/fastcgi: directorio donde se guardan los archivos de caché en disco.
  • levels=1:2: estructura de subdirectorios que evita saturar una sola carpeta con miles de archivos.
  • keys_zone=WORDPRESS:100m: nombre de la zona y 100 MB de memoria para las claves (suficiente para cientos de miles de entradas).
  • max_size=1g: tamaño máximo en disco; al superarlo, Nginx elimina las entradas menos usadas.
  • inactive=60m: las entradas sin visitas durante 60 minutos se eliminan.
  • use_temp_path=off: escribe directamente en la caché final, sin copias innecesarias entre sistemas de archivos.

Crea el directorio y dale permisos: sudo mkdir -p /var/cache/nginx/fastcgi && sudo chown -R www-data:www-data /var/cache/nginx/fastcgi. En CentOS el usuario suele ser nginx.

Paso 2: Activar la caché en el bloque del servidor

Dentro del bloque server de tu sitio (por ejemplo, en /etc/nginx/sites-available/tudominio.com), añade estas directivas en el bloque location ~ \.php$:

fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_cache_use_stale error timeout updating $http_x_header;
fastcgi_cache_lock on;
fastcgi_cache_bypass $skip_cache;
no_cache $skip_cache;

Y en el bloque server, define la lógica de exclusión:

set $skip_cache 0;

if ($request_method = POST) { set $skip_cache 1; }
if ($query_string != «») { set $skip_cache 1; }
if ($request_uri ~* «/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml») { set $skip_cache 1; }
if ($http_cookie ~* «comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in|woocommerce_cart|woocommerce_checkout») { set $skip_cache 1; }

Este bloque de condiciones es crítico. Excluye del caché el área de administración, los comentarios, los carritos de WooCommerce y cualquier usuario autenticado. Si te saltas alguna exclusión, los usuarios verán contenido privado de otros visitantes o no podrán iniciar sesión. He visto tickets de soporte por cosas así que costaron horas de diagnosticar.

Consejo: si usas WooCommerce, las cookies woocommerce_cart y woocommerce_checkout son obligatorias en la lista de exclusión. De lo contrario, romperás el proceso de compra.

Enviar la cabecera de estado de caché

¿Cómo saber si una respuesta se sirve desde caché? Añade esta línea dentro del bloque location ~ \.php$:

add_header X-FastCGI-Cache $upstream_cache_status;

Paso 3: Purgar la caché automáticamente al publicar contenido

Aquí está el problema clásico de FastCGI Cache: publicas o editas una entrada y la versión antigua sigue sirviéndose hasta que expira. La solución más limpia es un pequeño plugin de WordPress que ejecute la purga mediante un comando de Nginx (ngx_cache_purge) o, más simple, borrando el directorio de caché.

Si no quieres compilar el módulo ngx_cache_purge, tienes dos caminos: usar el plugin Nginx Helper con el método de purga «Eliminar archivos de caché» apuntando a /var/cache/nginx/fastcgi, o crear un hook en functions.php que ejecute la limpieza vía cron:

add_action(‘save_post’, ‘puruar_caché_nginx’, 10, 1);
function puruar_caché_nginx($post_id) { exec(‘sudo -u www-data rm -rf /var/cache/nginx/fastcgi/*’); }

Eso sí, concede permisos sudo limitados al usuario PHP solo para ese comando, editando sudoers con visudo. Por seguridad.

Probar que la caché funciona

Recarga Nginx con sudo nginx -t && sudo systemctl reload nginx y comprueba las cabeceras con curl:

curl -I https://tudominio.com

La primera petición devolverá X-FastCGI-Cache: MISS. Repítela y deberías ver HIT: la página se sirve desde la caché. ¿Aparece BYPASS? Entonces alguna regla de exclusión se está aplicando, lo cual es normal si estás logueado.

Verificación en navegador: abre las herramientas de desarrollador (F12), pestaña Red, y revisa la cabecera X-FastCGI-Cache en la respuesta del documento HTML. HIT indica que la caché está activa.

Errores comunes al configurar FastCGI Cache en WordPress

  • Usuarios logueados ven caché: falta la cookie wordpress_logged_in en la lista de exclusión.
  • Permisos denegados en el directorio de caché: verifica que el propietario coincide con el usuario worker de Nginx.
  • Contenido desactualizado tras publicar: la purga automática no está configurada o el hook no se ejecuta.
  • 403 en wp-admin tras activar caché: revisa que las reglas de exclusión de /wp-admin/ estén en su lugar antes de la directiva fastcgi_pass.

¿FastCGI Cache sustituye a un plugin de caché?

En la mayoría de los casos, sí, en lo que respecta a caché de página completa. Aun así, puede complementarse con optimizaciones a nivel de assets (minificación, lazy load) mediante otros métodos.

¿Funciona con HTTPS y HTTP/2?

Sí. La clave de caché incluye el esquema ($scheme), así que HTTP y HTTPS se cachean por separado, sin conflictos.

Conclusión

Pocas mejoras de rendimiento dan tanto retorno a nivel de servidor como habilitar FastCGI Cache Nginx en WordPress: tiempos de carga drásticamente reducidos, menos CPU y capacidad para asumir picos de tráfico sin coste adicional. La configuración exige cuidado con las exclusiones de cookies y rutas dinámicas, pero siguiendo esta guía tendrás un sistema de caché a nivel de servidor, superior a cualquier plugin, funcionando en menos de una hora. No olvides la purga automática: que tus visitantes vean siempre el contenido actualizado.

Si necesitas ayuda para configurar FastCGI Cache Nginx en tu servidor, resolver conflictos con WooCommerce o ajustar la purga de caché, en RedServicio (redservicio.net) encontrarás soporte técnico especializado en administración de servidores y optimización de WordPress.