Ventajas del caching
- Reducción de carga en el backend: ideal para recursos estáticos o contenido que no cambia con frecuencia, ya que evita regenerar la misma respuesta una y otra vez.
- Velocidad de respuesta mejorada: los usuarios reciben los recursos directamente desde la caché, con una latencia notablemente menor.
- Ahorro de recursos: menos peticiones al backend significa menos uso de CPU, memoria y consultas a la base de datos.
- Escalabilidad: permite atender muchos más usuarios simultáneos con la misma infraestructura.
Limitaciones del caching
- Contenido dinámico: no es ideal para datos que cambian constantemente por usuario, como carritos de compra o paneles personalizados.
- Uso de espacio en disco: el almacenamiento de caché puede crecer rápidamente si no defines límites de tamaño y expiración.
- Riesgo de contenido desactualizado: si el contenido original cambia y la caché no se invalida correctamente, los usuarios pueden recibir información obsoleta durante un tiempo.
Tipos de caché disponibles en Nginx
- Proxy Cache: almacena las respuestas que llegan desde un servidor backend y las sirve directamente en peticiones posteriores, sin volver a consultar al backend.
- FastCGI Cache: pensado para aplicaciones que usan FastCGI, como WordPress corriendo sobre PHP-FPM.
- Microcaching: caché de muy corta duración (segundos) aplicado incluso a contenido considerado "dinámico", que reduce carga sin sacrificar demasiada frescura de los datos.
Casos de uso comunes
El caching de Nginx es especialmente efectivo en:
- E-commerce: catálogos de productos con alto volumen de visitas pero baja frecuencia de cambio.
- Medios y noticias: portales con picos de tráfico masivo sobre el mismo contenido.
- Blogs y sitios de contenido: sitios WordPress que sirven artículos e imágenes repetidamente a distintos visitantes.
- Streaming: distribución de contenido estático como fragmentos de video.
En cambio, evita cachear rutas que manejan datos sensibles (paneles administrativos) o que requieren interacciones totalmente personalizadas por usuario, como carritos de compra o dashboards en tiempo real.
Paso 1: Definir la zona de caché
Antes de usar el caché en cualquier location, debes declarar la zona de memoria donde se guardarán sus claves. Esto se hace en el bloque http de tu configuración principal:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache_zone:10m max_size=1g inactive=60m use_temp_path=off; -
/var/cache/nginx: ruta en disco donde se almacenará físicamente la caché. -
keys_zone: nombre y tamaño de la zona de memoria reservada para las claves del caché. -
max_size: tamaño máximo que puede ocupar la caché en disco. -
inactive: tiempo que un objeto permanece en caché si nadie vuelve a solicitarlo.
Paso 2: Habilitar proxy cache en un location
Con la zona ya declarada, actívala dentro del bloque location que quieras cachear:
location / {
proxy_cache cache_zone;
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
add_header X-Cache-Status $upstream_cache_status;
} -
proxy_cache: indica qué zona de caché usar (definida en el paso anterior). -
proxy_cache_valid: define el tiempo de vida del caché según el código de estado HTTP devuelto. -
X-Cache-Status: agrega un encabezado a la respuesta que te permite ver si el recurso vino de caché (HIT) o se pidió al backend (MISS), útil para depurar.
Configurar FastCGI Cache para WordPress y PHP
Si tu aplicación corre sobre PHP-FPM (como WordPress), el equivalente al proxy cache es el FastCGI cache:
fastcgi_cache_path /var/cache/nginx_fastcgi levels=1:2 keys_zone=fastcgi_cache_zone:10m max_size=1g inactive=60m;
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_cache fastcgi_cache_zone;
fastcgi_cache_valid 200 10m;
fastcgi_cache_valid 404 1m;
add_header X-FastCGI-Cache $upstream_cache_status;
} Esta configuración puede reducir la carga sobre PHP-FPM y la base de datos MySQL de forma drástica en sitios con mucho tráfico de lectura, como blogs o sitios informativos.
Microcaching para contenido semi-dinámico
El microcaching aplica tiempos de vida extremadamente cortos (uno o pocos segundos) incluso a contenido que cambia con frecuencia, absorbiendo picos de tráfico simultáneo sin servir datos demasiado desactualizados:
location / {
proxy_cache cache_zone;
proxy_cache_valid 200 1s;
proxy_cache_bypass $cookie_session;
proxy_pass http://backend;
} -
proxy_cache_valid 200 1s: guarda las respuestas exitosas por apenas un segundo, suficiente para absorber ráfagas de tráfico simultáneo sobre el mismo recurso. -
proxy_cache_bypass: evita servir contenido cacheado cuando existe una cookie de sesión activa, para no mostrarle a un usuario autenticado el contenido genérico de otro.
Cómo verificar que el caché está funcionando
Con el encabezado X-Cache-Status habilitado, puedes inspeccionar cualquier respuesta con curl para confirmar el comportamiento:
curl -I https://tu-sitio.com/ En la respuesta verás uno de estos valores:
- HIT: el recurso fue servido directamente desde la caché, sin tocar el backend.
- MISS: el recurso no estaba en caché y se solicitó al backend, guardándose para futuras peticiones.
El caching en Nginx es una de las optimizaciones que más impacto genera con menos esfuerzo de implementación: proxy cache para contenido general, FastCGI cache para aplicaciones PHP como WordPress, y microcaching cuando necesitas absorber picos de tráfico sin sacrificar demasiada frescura de los datos. La clave está en elegir bien qué rutas cachear y por cuánto tiempo, evitando siempre el contenido sensible o altamente personalizado. Si tienes dudas durante la implementación, nuestro equipo de soporte técnico está disponible 24/7 para ayudarte.
LiteSpeed hosting, NVMe and 24/7 support from $3/mo.