停止启用 php 的自定义错误页面的 fastcgi_cache

停止启用 php 的自定义错误页面的 fastcgi_cache

自从在我的 nginx 服务器上启用 fastcgi_cache 以来,我启用 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,启用 php 的 404 页面将像多年来一样工作。

我如何禁用自定义错误页面的缓存?

答案1

您应该删除fastcgi_cache_valid 404 1m;。这会强制 nginx 缓存 404 错误,但根据规范,这些错误不应该被缓存。

答案2

nginx 的 Igor 提出了两条建议:

问题出在 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;
}

相关内容