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