2 votos

Nginx Caché incluso si es una respuesta 404

Yo uso 404 reescritura url:

    error_page 404 = /url_rewriting.php;

Almaceno en caché las imágenes generadas con un render script estando en una carpeta /render/:

    set $no_cache 0;

    location ~ /render/ {
            include snippets/fastcgi-php.conf;
            #fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            fastcgi_pass 127.0.0.1:9000;

            fastcgi_buffers 8 16k; # increase the buffer size for PHP-FTP
            fastcgi_buffer_size 32k; # increase the buffer size for PHP-FTP
            fastcgi_cache_key $scheme$host$request_uri$request_method;
            fastcgi_cache PROD;
            fastcgi_cache_valid any 20d;
            fastcgi_cache_valid 404      1d;
            fastcgi_cache_use_stale updating error timeout invalid_header http_500 http_503;
            fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
            fastcgi_hide_header "Set-Cookie";
            fastcgi_cache_bypass $no_cache;
            fastcgi_no_cache $no_cache;
            expires 10M;
            access_log off;
            add_header Cache-Control "public";
            add_header X-Cache-Status $upstream_cache_status;
    }

La caché funciona con una url como ésta:

https://mywebsite.com/include/php/render/framed/img.php?VR=1&size=300&image=U3pmwKi

Pero la caché no funciona con una url como esta:

https://mywebsite.io/include/php/render/framed/file/VR/1/size/300/image/U3dpwK

Esta segunda URL pasa por error_page 404 = /url_rewriting.php; porque el directorio 'file' no existe pero el script muestra la imagen gracias a url_rewriting.php script que hace el truco

¿Qué tengo que actualizar en mi configuración de Nginx para poder almacenar en caché las respuestas 404?

1voto

mahemoff Puntos 122

El almacenamiento en caché de las respuestas de error es posible con la función always palabra clave:

add_header Cache-Control "public; max-age=3600" always;

De la documentación :

Añade el campo especificado a una cabecera de respuesta siempre que el código de respuesta sea igual a 200, 201 (1.3.10), 204, 206, 301, 302, 303, 304, 307 (1.1.16, 1.0.13), o 308 (1.13.0) ... Si el always (1.7.5), el campo de cabecera se añadirá independientemente del código de respuesta.

0voto

Kurt Puntos 124

Todavía no estoy seguro de por qué, pero necesitaba cambiar la clave de caché.

proxy_cache_key "$host$request_uri";

Bloque completo:

    location / {
        proxy_pass http://gitlab-pages;
        include proxy_params;

        more_set_input_headers  "Host: templates.pages.example.com";

        proxy_cache            gitlab;
        proxy_cache_key        "$host$request_uri";
        proxy_cache_use_stale  error timeout updating http_500 http_502 http_503 http_504 http_404;
        proxy_cache_lock       on;
        proxy_cache_valid      200 302 304 404 5m;
        proxy_cache_valid      any 1m;
        proxy_cache_revalidate on;
        proxy_ignore_headers   "Set-Cookie";
        proxy_hide_header      "Set-Cookie";

        add_header            X-CACHE $upstream_cache_status always;
    }

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X