nginx 未在缓存内容上返回 304

nginx 未在缓存内容上返回 304

我使用 nginx 作为反向代理,并使用 Apache 后端处理一些 PHP 文件。

这些文件返回正确的过期标头,并且 proxy_cache 可以很好地缓存它们,但我注意到缓存的内容在每次刷新时都会返回 200,而返回缓存文件上的 304 可能会更有效率。

有问题的文件是由 PHP 生成的。URL 中没有 .php,因为它们已被美化。

知道为什么 nginx 在重复访问缓存的 PHP 输出时可能不会返回 304 吗?

澄清一下:它使用 proxy_cache 来缓存动态 PHP 页面(而不是 PHP 生成的静态 html 页面)。我在 PHP 文件中设置了时间 + 24 小时的过期标头。考虑到这一点,我希望 nginx 能够在 24 小时窗口内在其缓存版本上返回 304。

答案1

如果 php 后端随请求返回 cookie 标头,则该请求将被视为新请求。尝试使用 proxy_pass 将此指令添加到 nginx 位置:

proxy_ignore_headers “缓存控制” “过期” “X-Accel-Expires” “设置 Cookie”;

答案2

经过各种尝试,我发现答案是我忘记在 php 中声明“上次修改”标头。由于页面每天都会更改,因此我将上次修改日期设置为前一天午夜。现在它按预期返回 304。

答案3

因为 PHP 正在动态生成 HTML 文件,所以它们始终是新的(就 Nginx 而言)。

如果您想缓存 PHP - 您需要使用像 APC 或 xCache 这样的操作码缓存。

相关内容