Nginx Cache, даже если это ответ 404

Я использую URL-адрес перезаписи 404:

    error_page 404 = /url_rewriting.php;

Я кэширую изображения, созданные с помощью скрипта рендеринга, находящегося в папке / 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;
    }

Кеш работает с URL-адресом, подобным этому:

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

Но кеш не работает с URL-адресом вроде этого:

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

Этот второй URL-адрес проходит через error_page 404 = /url_rewriting.php;, потому что каталог 'file' не существует, но отображается сценарий изображение благодаря сценарию url_rewriting.php, который делает трюк

Что мне нужно обновить в моей конфигурации Nginx, чтобы иметь возможность кэшировать ответы 404?

2
задан 29 April 2018 в 16:31
2 ответа

Кэширование ответов об ошибках возможно с помощью ключевого слова always :

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

Из документации :

Добавляет указанное поле в заголовок ответа при условии, что код ответа равен 200, 201 ( 1.3.10), 204, 206, 301, 302, 303, 304, 307 (1.1.16, 1.0.13) или 308 (1.13.0) ... Если всегда указан параметр (1.7.5), поле заголовка будет добавлено независимо от кода ответа.

0
ответ дан 3 December 2019 в 13:58

Я все еще не уверен, почему, но мне нужно было изменить ключ кеша.

proxy_cache_key "$ host $ request_uri";

Полный блок:

    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;
    }
0
ответ дан 11 March 2020 в 14:13

Теги

Похожие вопросы