Microcaching de NGINX Reduce el tiempo de carga de WordPress de segundos enteros a milisegundos, ya que el servidor web almacena en caché las respuestas HTML ya generadas durante unos segundos, aliviando así la carga de PHP-FPM y de la base de datos. Te mostraré cómo esta breve ventana de caché da sus frutos en la práctica, qué reglas garantizan la seguridad de WordPress y cómo se pueden conseguir respuestas notablemente más rápidas en momentos de picos de tráfico.
Puntos centrales
De antemano Resumo los aspectos más importantes para que puedas leer los apartados siguientes de forma selectiva.
- Milisegundos En lugar de segundos: los TTL cortos, de entre 1 y 10 s, sirven las páginas recurrentes con extrema rapidez.
- Ayuda En el backend: menos solicitudes para PHP-FPM y la base de datos, lo que se traduce en una carga del servidor notablemente menor.
- Reglas Proteger: las cookies, los datos de inicio de sesión y los carritos de la compra no se almacenan en la caché.
- Escala En el día a día: los picos de tráfico se gestionan sin problemas y se reduce notablemente el número de tiempos de espera y de errores 502.
- Bloque de construcción En la configuración: junto con OPcache, Gzip/Brotli y un ajuste adecuado de la base de datos, se consigue velocidad.
Cómo funciona técnicamente el microcaching
NGINX almacena el código HTML generado por WordPress en la caché de FastCGI y responde a las solicitudes posteriores idénticas directamente desde la memoria, sin volver a recargar PHP-FPM ni la base de datos. Para ello utilizo tiempos de vida muy cortos, ya que es importante que el contenido esté actualizado, mientras que la tasa de aciertos de la caché aumenta rápidamente en los momentos de mayor tráfico. El efecto se nota de inmediato: las solicitudes idénticas se resuelven como aciertos de caché y se transmiten en milisegundos. En la práctica, las instalaciones de WordPress pueden acelerarse considerablemente; un ejemplo que se cita a menudo habla de una aceleración de hasta 400 veces si se configuran correctamente unas pocas directivas (fuente: NGINX (Blog). Lo importante es que solo recojo respuestas que se pueden almacenar en caché y omito deliberadamente las páginas sensibles.
Por qué WordPress se beneficia especialmente
WordPress genera muchas respuestas idénticas una tras otra, por ejemplo, para páginas de inicio, entradas y páginas de categorías, sobre todo poco después de una publicación. Aquí es precisamente donde entra en juego el microcaching: las visitas idénticas se sirven sin carga de trabajo para PHP y alivian enormemente la carga de la base de datos. El resultado son valores más bajos de «time-to-first-byte» y menos picos de CPU, lo que mejora notablemente la experiencia del usuario. Además, apuesto por OPcache, una compresión adecuada de los archivos multimedia y una representación eficiente de los temas, ya que todas estas medidas se suman. Quien quiera profundizar en el tema, encontrará una buena introducción en Caché de NGINX para WordPress, que pone claramente de manifiesto su utilidad práctica.
Configuración: pensar paso a paso
Inicio Es una zona de caché con ruta, clave y tamaño; almacena las respuestas del flujo FastCGI. En el bloque del servidor, configuro que solo se almacenen en caché las solicitudes GET y HEAD, mientras que las POST quedan excluidas. Establezco cookies como «wordpress_logged_in» o «woocommerce_items_in_cart» como criterios de exclusión, para que los usuarios que hayan iniciado sesión reciban siempre contenido actualizado y personalizado. Para mayor transparencia, envío un encabezado X-Cache con los valores HIT, MISS o BYPASS, de modo que puedo ver inmediatamente el estado en el navegador o en los registros. Además, limito el tamaño de los objetos para ahorrar memoria y permito las solicitudes condicionales, para que los encabezados HTTP se complementen correctamente.
Reglas de caché: lo que queda excluido de forma segura
Inicio de sesión, Nunca guardo en caché el área de administración, el proceso de pago, el carrito de la compra ni las páginas de perfil, ya que contienen datos de sesión o contenido de carácter personal. Además, excluyo los nonces, las vistas previas y las páginas de búsqueda, ya que a menudo generan respuestas personalizadas. Los parámetros de consulta como «add-to-cart» o «preview» se ejecutan directamente en PHP, para evitar que se generen copias erróneas. Algunos plugins establecen sus propias cookies; compruebo estos nombres de antemano y los registro como reglas de exclusión. De este modo, la web sigue siendo funcional, pero muestra las páginas estándar anónimas a una velocidad ultrarrápida.
TTL, frescura y la „ventana“
Corto Los TTL de entre 1 y 10 segundos son el núcleo del microcaching, ya que combinan hábilmente la actualidad y la rapidez. Elijo el intervalo según el tipo de contenido: las publicaciones que suscitan un debate acalorado requieren tiempos más cortos que las páginas de destino estáticas. Quien quiera planificar con mayor precisión puede definir una pequeña „ventana“ que permita una revalidación breve y suavice los picos de tráfico. En esta entrada se ofrece una explicación detallada de cómo determinar la ventana ideal: Ventana de optimización de la caché, que utilizo como punto de partida para la reflexión. La siguiente tabla muestra los perfiles más habituales y sus efectos.
| TTL | Utilice | Ventaja | Nota |
|---|---|---|---|
| 1–2 s | Noticias de última hora, publicaciones virales | Contenidos muy actuales, alta tasa de visitas en los picos de tráfico | El backend sigue requiriendo reconstrucciones frecuentes |
| 3-5 s | Inicio, Categorías | Un buen equilibrio entre ritmo y frescura | Ideal para páginas de WP con mucho tráfico |
| 6–10 s | Páginas de productos y páginas «Evergreen» | Carga del backend muy baja | Las actualizaciones tardan unos segundos |
| 15-30 s | Contenidos que rara vez se modifican | Máximo alivio | Utilizar solo si el nivel de frescura es adecuado |
Supervisión y análisis de encabezados
Encabezado Digo la verdad: con X-Cache, Age y Cache-Control detecto coincidencias, tiempos de caducidad y eludencias. En las herramientas de desarrollo del navegador veo al instante si la página se ha cargado como HIT y cuán antigua es la entrada. Del lado del servidor, registro el estado en el access_log para detectar puntos críticos y aplicar reglas de forma específica. Además, tengo en cuenta la Encabezado Cache-Control, para que las cachés de los navegadores y los servidores proxy funcionen correctamente. Quien realiza mediciones periódicas detecta el desperdicio, evita errores y mantiene la plataforma con una velocidad fiable.
Escalabilidad ante picos de carga
Tráfico rara vez se distribuye de forma uniforme; los picos suelen producirse en intervalos de segundos. El microcaching capta estas oleadas, ya que las visitas a páginas idénticas se sirven inmediatamente desde la caché, evitando así las costosas rutas del backend. De este modo, se reduce la tasa de errores, el TTFB se acorta notablemente y la página permanece accesible para los lectores. De este modo, incluso las instancias VPS más pequeñas pueden hacer frente a picos de tráfico por boletines informativos o a oleadas en redes sociales sin colapsarse. Para redacciones, tiendas con lanzamientos de productos o campañas, esto supone una ventaja decisiva.
Interacción con plugins y CDN
Plugin-Las cachés suelen actuar a nivel de PHP; la microcaché se sitúa antes y es la que determina el mayor impacto. Por eso, mantengo los tiempos de vida de la caché de los plugins más cortos que el TTL de NGINX o los omito en las páginas estándar, para que ninguna capa duplicada consuma energía innecesariamente. Una CDN puede servir imágenes, CSS y JS, mientras que la microcaché acelera el HTML; esta combinación cubre ambos niveles. El almacenamiento en caché del navegador mediante ETag, Last-Modified y Gzip/Brotli completa el panorama y reduce el ancho de banda. Importante: los «purge hooks» vinculan las publicaciones o los cambios en los productos con una invalidación selectiva de la caché.
Casos extremos y seguridad
Datos personales Excluyo estrictamente ciertos contenidos, como las páginas de cuentas, los resúmenes de pedidos o los contenidos relacionados con la sesión. En el caso de WooCommerce, distingo claramente entre las páginas de categorías en producción (almacenables en caché) y el carrito, la caja y la cuenta (excluidas). Las vistas previas, las acciones protegidas por nonce y las rutas de administración tampoco se incluyen. Realizo pruebas específicas con usuarios registrados y anónimos, así como con dispositivos con y sin cookies. De este modo, la página funciona correctamente, es rápida y cumple con la normativa.
Prácticas y costes del alojamiento web
Gastos de servidor aumentan rápidamente cuando cada solicitud pasa por PHP y la base de datos; el microcaching supone un ahorro real en este caso. Muchas páginas funcionan sorprendentemente bien con entre 1 y 4 núcleos de CPU y entre 2 y 8 GB de RAM, siempre que el microcaching funcione correctamente. En lugar de aumentar la tarifa entre 20 y 50 € al mes, reduzco las solicitudes al backend y mantengo tiempos de respuesta cortos. A la hora de comparar y recomendar, webhoster.de suele ser el ganador de las pruebas en cuestiones de rendimiento de WordPress, sobre todo cuando lo que cuenta es la velocidad de respuesta y el comportamiento bajo carga. Quien quiera mejorar, debe apostar por un almacenamiento NVMe más rápido, versiones actualizadas de OpenSSL/Brotli y copias de seguridad regulares.
Configuración práctica: configuración mínima con reglas de protección
Concreto Las directivas ayudan a poner en marcha el sistema rápidamente. El siguiente ejemplo muestra una configuración básica práctica con Cache-Lock, exclusiones de cookies, BYPASS y TTL cortos solo para HTML.
# Zona de caché global (ajustar tamaño y tiempo de inactividad)
fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=MICRO:32m
max_size=2g inactive=60s use_temp_path=off;
# Solo GET/HEAD almacenables en caché
map $request_method $cacheable_method {
default 0;
GET 1;
HEAD 1;
}
# Cookies/parámetros que omiten la caché
map $http_cookie $skip_cache {
default 0;
~*(wordpress_logged_in|wordpress_sec) 1;
~*(wp-postpass|comment_author) 1;
~*(woocommerce_items_in_cart|woocommerce_cart_hash|wp_woocommerce_session_) 1;
}
# Encabezados de omisión opcionales (p. ej., para ganchos de purga)
map $http_x_microcache_bypass $header_bypass {
por defecto 0;
1 1;
}
# Omisión sencilla de los parámetros de seguimiento (evita la fragmentación)
map $args $has_tracking {
por defecto 0;
~*(^|&)(utm_[^&]+|fbclid|gclid|mc_cid|mc_eid)= 1;
}
# Combinar las condiciones
map "$cacheable_method$skip_cache$header_bypass$has_tracking" $bypass {
por defecto 1; # Por defecto: bypass
1000 0; # GET/HEAD, sin cookies, sin encabezados, sin rastreadores: caché
}
server {
listen 80;
server_name example.com;
root /var/www/html;
# El bloqueo de caché protege contra las avalanchas
fastcgi_cache_lock on;
fastcgi_cache_lock_age 5s;
fastcgi_cache_lock_timeout 10s;
# PHP-Location
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php-fpm.sock;
# Almacenar en caché solo HTML de forma breve
set $is_html 0;
if ($sent_http_content_type ~* "text/html") { set $is_html 1; }
fastcgi_cache MICRO;
fastcgi_cache_key "$esquema$Método de solicitud$Host$URI$is_args$args";
fastcgi_no_cache $bypass;
fastcgi_cache_bypass $bypass;
# Perfil de TTL
fastcgi_cache_valid 200 3s;
fastcgi_cache_valid 301 302 10s;
fastcgi_cache_valid any 0s;
# Servicio de datos caducados en caso de errores
fastcgi_cache_use_stale error timeout updating http_500 http_503;
# Respuestas transparentes
add_header X-Cache $upstream_cache_status always;
# No almacenar en búfer las respuestas grandes
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
# Configuración predeterminada de WordPress
location / {
try_files $uri $uri/ /index.php?$args;
}
# No almacenar nunca en caché
location = /wp-login.php { access_log off; }
location ~* ^/(wp-admin|cart|checkout|my-account|account) { add_header X-Cache BYPASS always; }
}
Nota: Los parámetros de seguimiento se tratan aquí mediante un bypass. Si se desea eliminarlos, se pueden utilizar redireccionamientos canónicos del lado del servidor o la normalización avanzada; para el microcaching, por lo general basta con el simple bypass, lo que evita la fragmentación de claves.
Estrategia clave y normalización
Una clave de caché limpia Evita duplicados. Me baso en las rutas y los estados de consulta que realmente modifican el contenido. Ejemplos:
- Mantener la coherencia en las barras al final (WordPress lo gestiona a través de los enlaces permanentes/try_files).
- Permitir solo los parámetros relevantes (por ejemplo, «s=» para la búsqueda, «paged=» para la paginación); todo lo demás omite la caché.
- Incluye las clases de dispositivos y los idiomas en la clave solo si el código HTML varía realmente (por ejemplo, en pruebas A/B del lado del servidor o en temas multilingües sin prefijo de URL).
Cuantas menos variantes genere una misma página, mayor será la tasa de aciertos. En los sitios web internacionalizados con prefijos de idioma (/de/, /en/), basta con la ruta; en el caso de la gestión lingüística basada en cookies, la cookie debe servir como vía alternativa.
Protección contra la estampida y estrategias contra el «stale»
fastcgi_cache_lock evita que, al caducar el TTL, se inicien docenas de llamadas simultáneas a PHP. NGINX permite „recalibrar“ exactamente una solicitud y atiende los accesos paralelos con el último objeto válido (actualización). Además, sostiene que fastcgi_cache_use_stale la página sigue estando disponible incluso en caso de errores (tiempo de espera agotado, 500/503). En la práctica, esto reduce drásticamente los errores 502/504 durante los picos de tráfico.
La purga y la actualización de contenidos en la práctica
Microcaching funciona con tiempos de vida (TTL) cortos, por lo que rara vez es necesario realizar un „purging“ clásico. Para las redacciones o tiendas que esperan una visibilidad «inmediata», hay tres métodos que han demostrado su eficacia:
- Purga suave a través del colector de derivación: Un hook de WordPress (por ejemplo, al publicar o actualizar) realiza una solicitud HTTP a una URL con el encabezado X-Microcache-Bypass: 1. Estas solicitudes eluden la caché y „precalientan“ el nuevo código HTML sin demora.
- Salto selectivo por URL: Para las páginas especialmente críticas (página de inicio, determinadas categorías), se puede configurar temporalmente un BYPASS mediante un mapa de NGINX (indicador en un archivo o variable), que se desactiva al cabo de unos segundos.
- Eliminación basada en archivos: Es posible, pero propenso a errores, ya que las claves se almacenan con hash. Solo lo utilizo cuando es absolutamente necesario y con una estrategia de rutas clara.
Lo importante es que los micro-TTL de entre 3 y 10 s garantizan prácticamente siempre la actualidad, sin necesidad de una costosa infraestructura de purga.
Registros, métricas y pruebas de carga
Medición hace visibles los efectos. Un formato de registro ampliado documenta el estado y las horas:
log_format micro '$remote_addr - $host "$request" $status '
'rt=$request_time urt=$upstream_response_time '
'u_cache=$upstream_cache_status bytes=$body_bytes_sent';
access_log /var/log/nginx/access.micro.log micro;
Tras cada implementación, compruebo la distribución de HIT/MISS/BYPASS, el tiempo medio de solicitud (request_time) y las diferencias entre las llamadas «calientes» y «frías». En las pruebas de carga (por ejemplo, con rampas cortas y picos), se observa que el TTFB se mantiene estable y bajo bajo carga y que la varianza disminuye. Si se observan desviaciones, se ajusta el TTL, las reglas de bypass o se reducen las variantes innecesarias en la clave.
WooCommerce: excepciones prácticas
Tiendas Se benefician enormemente del microcache para las páginas de categorías, las listas de productos, las páginas de detalles de productos (sin bloques personalizados) y los contenidos editoriales. Quedan totalmente excluidos el carrito, el proceso de pago, la cuenta y las listas comparativas. Reglas típicas sobre cookies:
- Bypass en: woocommerce_items_in_cart, woocommerce_cart_hash, wp_woocommerce_session_*
- Bypass en: logged_in, wordpress_sec, wp-postpass_* (entradas con contraseña)
- Bypass en: parámetros «add-to-cart» y acciones protegidas con nonce
En las páginas de productos, compruebo además si los widgets dinámicos de existencias y precios se actualizan mediante AJAX. Si es así, el HTML se puede almacenar en caché, mientras que los datos se obtienen en tiempo real a través de la API: una separación clara que garantiza la máxima velocidad.
Recursos y estructura de la memoria
Zona de caché y los acumuladores influyen directamente en la estabilidad. Algunas reglas generales:
- keys_zone: Entre 16 y 64 MB son suficientes para decenas de miles de claves; es mejor contar con un poco de margen.
- max_size: Establece un límite claro para el tamaño de la caché; en el caso de NVMe, entre 1 y 4 GB suelen ser suficientes para las microcachés.
- inactivo: Mantén durante 30-120 s los objetos que se utilizan con poca frecuencia; para los microcachés basta con 60 s.
- tmpfs: Para sitios web muy pequeños con requisitos de latencia extremos, puede resultar útil utilizar tmpfs (RAM); sin embargo, hay que tener en cuenta que la RAM es escasa y volátil.
En lo que respecta a PHP-FPM, gracias a la caché consigo reducir el valor de `pm.max_children` y aliviar la presión sobre la memoria, lo que suele ser una de las formas más rápidas de „reducir costes“ en servidores con mucha carga.
Problemas habituales y solución de problemas
Frecuente Las fuentes de error se pueden detectar a tiempo con unas cuantas comprobaciones:
- Cookies erróneas en la caché: Cuando se almacenan en caché páginas con encabezados «Set-Cookie», los visitantes anónimos reciben restos de sesión. Solución: «fastcgi_no_cache»/«fastcgi_cache_bypass» con «$upstream_http_set_cookie» o para cookies específicas.
- Problemas relacionados con el nonce y la vista previa: preview=true, customize_changeset_uuid, _wpnonce: hay que omitirlos sin falta.
- Bucles de redirección: 301/302: almacenar en caché solo temporalmente o excluir de forma específica; comprueba las reglas de «canonicals» y de la barra inclinada final.
- Páginas de búsqueda (/?s=…): Normalmente se configura de forma individual; yo lo configuro por defecto en BYPASS.
- xmlrpc.php, wp-cron.php: No los almacene en caché y limítelos si es necesario; a menudo generan una carga innecesaria.
- Contenido mixto En caso de cambio de HTTP a HTTPS: la clave contiene el esquema $; asegúrate de que el sitio funcione siempre a través de HTTPS.
- Faltan los encabezados Vary En cuanto a los recursos: irrelevante para el HTML, pero útil para los archivos estáticos; no obstante, se aplica lo siguiente: el HTML procede de la caché de FastCGI, mientras que los recursos, idealmente, proceden de la CDN.
Ajuste preciso para flujos de trabajo editoriales reales
Redacción Trabajo por etapas: borradores, avances, publicaciones. El microcaching nunca debe interferir en este proceso. Yo lo practico así:
- TTL más corto para la página de inicio y los archivos de categorías (3-5 s); tiempos de carga más largos para las páginas de destino estáticas (8-10 s).
- Calentamiento rutas importantes (Inicio, Categorías principales, 3-5 artículos más recientes) inmediatamente después de los eventos de publicación mediante el encabezado «bypass», para que los lectores reciban al instante el nuevo código HTML.
- Stale-if-error activamente, para seguir estando disponibles incluso en caso de pequeños problemas puntuales en la base de datos.
De este modo, la comodidad en la edición y el rendimiento se combinan a la perfección, sin que los autores tengan que hacer clic en „Vaciar caché“.
Lista de comprobación: De cero a una aceleración cuantificable
En primer lugar Creo «fastcgi_cache_path» y una zona; a continuación, activo «fastcgi_cache» en el bloque de servidor correspondiente. A continuación, defino las claves de caché, el TTL y los encabezados, configuro X-Cache y me aseguro de que las exclusiones sean correctas mediante fastcgi_no_cache/skip. Después, compruebo los métodos GET/HEAD, las cookies BYPASS y los parámetros de consulta para proteger las respuestas personalizadas. Durante el funcionamiento, superviso los valores de HIT/MISS/AGE, ajusto el TTL y la estrategia de claves, y compruebo el efecto mediante pruebas de carga. Por último, vinculo las publicaciones con eventos de purga para que los cambios se hagan visibles rápidamente.
Para llevar
Microcaching Acelera drásticamente WordPress, ya que las visitas a páginas idénticas permanecen durante segundos en la caché de NGINX y se vuelven a servir sin necesidad de PHP-FPM. Este método alivia la carga de la base de datos, reduce la tasa de errores en los picos de tráfico y, al mismo tiempo, mantiene los contenidos actualizados. Las reglas para las cookies, los inicios de sesión y los carritos de la compra preservan las funciones, mientras que las páginas estándar se benefician al máximo. En combinación con OPcache, los recursos comprimidos y una configuración adecuada de la base de datos, se consigue una mejora notable en la velocidad. Quien elija bien el periodo de caché medirá el efecto en milisegundos en lugar de segundos y aumentará notablemente la satisfacción de los usuarios.


