Nginx Microcaching · 3 min read · Jan 22, 2026

Por qué siempre deberías usar Nginx con microcaching

Por qué siempre deberías usar Nginx con microcaching

Todo el mundo sabe lo difícil que es sacar el máximo provecho de tu(s) servidor(es) web. En mi ocupación diaria como ingeniero de hosting, eso significa que a menudo recibo la misma pregunta: “Vaya, sitio web genial, pero ¿puede soportar un tráfico intenso?”.

La situación “normal”

Un sitio web “normal” que funciona bajo Apache con mod_php debería ser capaz de manejar 20 solicitudes por segundo con facilidad, pero ¿qué pasa si recibes como 50 solicitudes por segundo (no es extraño con algunos sitios web como los de partidos políticos, etc.)? La respuesta, en mi opinión, es dejar de usar Apache, porque tal como está ahora, Apache ya no es suficiente.

¡SÍ! ¡Nginx!

¡Entra Nginx! Así que lo que haces es configurar tu sitio web en Nginx y realizar una prueba de carga rápida (por ejemplo, 1000 solicitudes con 200 usuarios concurrentes) y ves que no obtienes mucho más que con Apache, pero ¿cómo? Es muy simple, se debe al hecho de que Nginx no tiene un módulo php integrado, por lo que necesitarías un procesador fastcgi para procesar las páginas php (sugiero usar php-fpm ya que es mejor que spawn-cgi). Entonces, ¿qué debo usar ahora, preguntas? ¡Usa microcaching!

¿Qué demonios es Microcaching?

¿Qué es microcaching? Bueno, la teoría es que almacenas en caché tus archivos, etc., por un corto período de tiempo (como por ejemplo 1 segundo). Lo que esto significa es que cuando un usuario solicita la página, se almacena en caché, por lo que la siguiente solicitud de cualquier otro vendrá de la caché, y con 100 usuarios solicitando en 5 segundos, solo 1 de cada 20 usuarios tendrá que construir la página completa (y con Nginx y un sitio bien estructurado, esto no es ningún problema).

¡No lo creo!

¡Más te vale creerlo! Déjame darte un ejemplo, toma este sitio web en el que estás ahora mismo. Supongamos que tenemos una prueba de carga de 1000 solicitudes con 200 usuarios concurrentes. Si ejecutas este sitio web bajo Apache, obtendrías entre 10-40 solicitudes por segundo, ¡máximo! Y tu servidor web estaría bajo una carga seria y te verías obligado a expandir tu entorno. Bajo Nginx con php-fpm sin microcaching es lo mismo (quizás un poco más de solicitudes, pero tu servidor tendría muchos procesos php-fpm ejecutándose para procesar las solicitudes). ¡Con microcaching obtienes entre 300-450 solicitudes por segundo!

¡Ok, dámelo!

Microcaching es en realidad fácil de configurar, a continuación hay un ejemplo de configuración que podrías ejecutar para cualquier sitio web hecho con PHP (en este caso es específico para Wordpress). Echa un vistazo:

#
# tu sitio web
#
server {
    listen       80;
    server_name  ;
    access_log    main;
    error_log ;
    root   ;
    location / {
        index  index.php index.html index.htm;
    }
    if (!-e $request_filename) {
        rewrite ^(.+)$ /index.php?q=$1 last;
    }
    location ~ \.php$ {
        # Configurar valores predeterminados
        set $no_cache "";
        # Si no es GET/HEAD, no almacenar en caché y marcar al usuario como no almacenable por 1 segundo a través de una cookie
        if ($request_method !~ ^(GET|HEAD)$) {
            set $no_cache "1";
        }
        # Eliminar la cookie de no caché si es necesario
        # (por alguna razón, add_header falla si se incluye en el bloque if anterior)
        if ($no_cache = "1") {
            add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/";
            add_header X-Microcachable "0";
        }
        # Pasar por alto la caché si se establece la cookie de no caché
        if ($http_cookie ~* "_mcnc") {
                    set $no_cache "1";
        }
        # Pasar por alto la caché si se establece la bandera
        fastcgi_no_cache $no_cache;
        fastcgi_cache_bypass $no_cache;
        fastcgi_cache microcache;
        fastcgi_cache_key $server_name|$request_uri;
        fastcgi_cache_valid 404 30m;
        fastcgi_cache_valid 200 10s;
        fastcgi_max_temp_file_size 1M;
        fastcgi_cache_use_stale updating;
        fastcgi_pass localhost:9000;
        fastcgi_pass_header Set-Cookie;
        fastcgi_pass_header Cookie;
        fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param  PATH_INFO          $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_path_info;
        #fastcgi_intercept_errors on;
        include fastcgi_params;
    }
}

También deberías incluir el formato de caché y la zona de caché en tu nginx.conf, agrega estas líneas a tu bloque http {}:

fastcgi_cache_path /var/cache/nginx2 levels=1:2 keys_zone=microcache:5m max_size=1000m;
log_format cache '$remote_addr - $remote_user [$time_local] "$request" '
'$status $upstream_cache_status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

¡Pruébalo!

¡Animo a todos a probarlo por sí mismos y ver la mejora en el rendimiento! Sé que es un gran cambio pasar de Apache a Nginx (en términos de configuración), ¡pero te acostumbrarás muy rápido!

¡Consulta http://livebyt.es para más artículos que vendrán pronto!

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.