Caché en NGINX

Cómo configurar el caché de páginas para acelerar tu sitio y reducir la carga del servidor.

Cuando un sitio recibe mucho tráfico, el servidor agota rápidamente los recursos generando páginas repetidamente. El caché de NGINX permite servir respuestas pregeneradas desde la memoria o el disco, lo que reduce drásticamente los tiempos de respuesta y descarga PHP y la base de datos.

NGINX puede almacenar en caché:

  • archivos estáticos (CSS, JS, imágenes)
  • páginas dinámicas (respuestas PHP/CMS)
  • páginas de error (404, 502, etc.)

En los VPS y los servidores dedicados, tienes control total sobre la configuración de NGINX.

1. Configurar el caché proxy general (proxy_cache)

Abre el archivo de configuración principal /etc/nginx/nginx.conf y añade lo siguiente en el bloque http { ... }:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static_cache:32m inactive=60m max_size=2g;
  • /var/cache/nginx — carpeta de almacenamiento de caché (créala con: sudo mkdir -p /var/cache/nginx)
  • levels=1:2 — estructura de directorios para búsquedas más rápidas
  • keys_zone=static_cache:32m — zona en memoria para claves y metadatos (32 MB)
  • inactive=60m — los archivos se eliminan si no se accede a ellos durante 60 minutos
  • max_size=2g — tamaño máximo del caché en disco

Crea la carpeta y establece los permisos:

sudo mkdir -p /var/cache/nginx
sudo chown www-data:www-data /var/cache/nginx

2. Caché sencillo para todo el sitio (proxy_cache)

Edita o crea la configuración de tu sitio (por ej., /etc/nginx/sites-available/site.com). Ejemplo: caché de todo el tráfico mediante proxy:

server {
    listen 80;
    server_name site.com www.site.com;

    location / {
        proxy_pass http://127.0.0.1:8080;  # tu puerto PHP-FPM o backend
        proxy_cache static_cache;
        proxy_cache_valid 200 301 302 60m;   # almacena en caché las respuestas exitosas durante 60 minutos
        proxy_cache_valid 404 1m;            # almacena en caché los errores durante 1 minuto
        proxy_cache_methods GET HEAD;        # almacena en caché solo las peticiones GET y HEAD
        proxy_ignore_headers Cache-Control Expires Set-Cookie;
        proxy_cache_bypass $http_cookie;     # omite el caché si hay cookies presentes
    }
}

Nuestros servicios y productos

HostingFunciona en discos NVMe ultrarrápidos. Apto para sitios web de cualquier complejidad.
Pedir
VPSParámetros ajustables y configuración flexible del SO. Administración gratuita incluida.
Pedir
Servidores dedicadosDisponibles diversas configuraciones Supermicro con procesadores Intel y AMD.
Pedir

3. Caché FastCGI (para respuestas PHP)

Para almacenar en caché páginas dinámicas (por ej., contenido generado por un CMS), usa fastcgi_cache.

Añade lo siguiente en el bloque http { ... } de /etc/nginx/nginx.conf:

fastcgi_cache_path /var/cache/nginx-fcgi levels=1:2 keys_zone=fcgi_cache:100m inactive=60m max_size=5g;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;

Crea la carpeta:

sudo mkdir -p /var/cache/nginx-fcgi
sudo chown www-data:www-data /var/cache/nginx-fcgi

En el bloque servidor principal (donde se gestiona PHP), añade el caché en el bloque location de PHP:

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;  # ajusta a tu socket PHP-FPM
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    fastcgi_cache fcgi_cache;
    fastcgi_cache_valid 200 301 302 60m;   # almacena en caché las respuestas exitosas durante 60 minutos
    fastcgi_cache_valid 404 1m;            # almacena en caché los errores durante 1 minuto
    fastcgi_cache_bypass $http_cookie;     # omite el caché si hay cookies presentes
    fastcgi_no_cache $http_cookie;         # no almacena en caché si hay cookies presentes
}

Notas útiles

  • No almacenes en caché páginas con autenticación, área de cliente, carritos o áreas de administración — usa fastcgi_cache_bypass y fastcgi_no_cache para esas URI.
  • Para CMS dinámicos (Bitrix, WordPress, etc.), almacena en caché únicamente las peticiones GET sin cookies.
  • Tras cualquier cambio, prueba y recarga NGINX:
sudo nginx -t          # comprobar la configuración
sudo systemctl reload nginx
  • Limpia el caché manualmente si es necesario:
sudo rm -rf /var/cache/nginx/*
sudo rm -rf /var/cache/nginx-fcgi/*

Ayuda

¿Tienes dudas o necesitas ayuda? Escríbenos a través del sistema de tickets — siempre estamos aquí para ayudarte!

¿Necesitas ayuda?Nuestros ingenieros te ayudarán gratuitamente con cualquier pregunta en minutosContáctanos