Назад | Перейти на главную страницу

остановка fastcgi_cache для настраиваемой страницы ошибок с поддержкой php

После включения fastcgi_cache на моем сервере nginx моя настраиваемая страница ошибок с поддержкой php внезапно перестала работать, и вместо этого я получаю внутреннее сообщение 404.

В nginx.conf:

fastcgi_cache_path /var/lib/nginx/fastcgicache levels=1:2 
keys_zone=MYCACHE:5m inactive=2h max_size=1g loader_files=1000
loader_threshold=2000;
map $http_cookie $no_cache { default 0; ~SESS 1; }
fastcgi_cache_key "$scheme$request_method$host$request_uri";
add_header X-My-Cache $upstream_cache_status;

map $uri $no_cache_dirs {
   default 0;
   ~^/(?:phpMyAdmin|rather|poll|webmail|skewed|blogs|galleries|pixcache) 1;
}

соответствующий кеш-материал в моем fastcgi.conf:

fastcgi_cache MYCACHE;
fastcgi_keep_conn on;
fastcgi_cache_bypass $no_cache $no_cache_dirs;
fastcgi_no_cache $no_cache $no_cache_dirs;
fastcgi_cache_valid 200 301 5m;
fastcgi_cache_valid 302 5m;
fastcgi_cache_valid 404 1m;
fastcgi_cache_use_stale error timeout invalid_header updating http_500;
fastcgi_ignore_headers Cache-Control Expires;
expires epoch;
fastcgi_cache_lock on;

Если я отключу fastcgi_cache, страница 404 с поддержкой php будет работать так же, как и в течение многих лет.

Как отключить кеш для настраиваемой страницы ошибок?

Вы должны удалить fastcgi_cache_valid 404 1m;. Это заставляет nginx кэшировать ошибки 404, но, согласно спецификации, они не должны кэшироваться.

Два предложения Игоря из nginx:

Проблема в fastcgi_cache_key: fastcgi_cache_key "$ scheme $ request_method $ host $ request_uri";

Он всегда использует исходный клиентский $ request_uri. Попробуйте: fastcgi_cache_key "$ scheme $ request_method $ host $ uri? $ Args";

внесение этого изменения вернуло меня к пользовательскому 404, но к кэшированной версии. Добавление следующего местоположения исправило это:

location = /dhe404.shtml {
fastcgi_pass 127.0.0.1:10004;
fastcgi_cache  off;
}