nginx不会在caching的内容上返回304

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

这些文件返回正确的过期头文件,proxy_cache做了很好的caching,但是我注意到caching内容在每次刷新时都会返回200,因为在caching文件上返回304可能更有效。

有问题的文件是由PHP生成的。 因为他们已经被美化,所以url中没有.php。

任何想法为什么Nginx可能不会返回304重复访问caching的PHP输出?

澄清:它使用proxy_cache来cachingdynamicPHP页面(不是由PHP生成的静态html页面)。 我在时间+ 24小时的PHP文件中设置过期标题。 考虑到这一点,我希望nginx能够在24小时内返回304caching版本。

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

proxy_ignore_headers“Cache-Control”“Expires”“X-Accel-Expires”“Set-Cookie”;

经过各种各样的东西,原来的答案是,我忽略了在PHP中声明“最后修改”标题。 由于该页面每天都会更改,因此我将上次修改date设置为上一个午夜。 如预期的那样,它正在返回304s。

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

如果您想要cachingPHP,则需要使用像APC或xCache这样的操作码caching。