1

当我使用 SSI 时,NGinx 对子请求使用了错误的缓存键

fastcgi_cache_key       "$request_method $scheme://$host$uri";

问题是,它以无限递归结束,因为在主请求上,NGinx 将包含 SSI 元素的页面存储在其缓存中,然后当它触发子请求时,使用该页面(包括 SSI 元素)作为结果的子请求(等等等等)。我认为$uri正是为了避免这种情况而设计的(不像$request_uri),但显然它不起作用。

nginx版本是1.3.8

4

1 回答 1

1

稍长的调试会话(nginxs 调试日志...很大)给了我答案:它不是直接的缓存键,但默认情况下REQUEST_URI设置为$request_uriin /etc/nginx/fastcgi_params。缓存键是正确的,但请求始终与父页面相同,因此父页面被缓存了两次:一次用于 parent-uri-key,一次用于 ssi-subrequest。在每次后续调用中,都会使用(损坏的)缓存值。

fastcgi_param REQUEST_URI $uri;
于 2013-01-28T21:53:05.350 回答