从源服务器

时间:2017-07-24 14:57:04

标签: caching nginx reverse-proxy nginx-location http-status-code-304

我们有一个非常简单的设置,NGINX位于前端,后端服务器(位于单独的物理服务器上)提供内容。

Nginx然后根据源服务器设置的EXPIRES和Cache-Control标头缓存内容。

我们注意到,当客户端发送If-Modified-Since标头时,NGINX没有向不在本地NGINX缓存中的图像发出304标头。相反,它会发出一个带有完整数据文件的200。

要解决此问题,我们已应用:

proxy_set_header If-Modified-Since $http_if_modified_since

然后将If-Modified-Since标头传递给后端,当然,它使用304标头正确返回 - 很棒。

但我们注意到,即使没有If-Modified-Since标头,NGINX也会缓存此304响应,并将未来的响应作为304传递给客户端。

我们如何禁用304响应的缓存并修复此问题?

提前感谢您的帮助,建议和提示。

1 个答案:

答案 0 :(得分:0)

您应该用

替换它
proxy_cache_revalidate on

,如Nginx文档中所示

  

proxy_cache_revalidate指示NGINX在从源服务器刷新内容时使用条件GET请求。如果客户端请求缓存但是由缓存控制头定义的过期项,则NGINX在其发送到源服务器的GET请求的头中包含If-Modified-Since字段。这样可以节省带宽,因为服务器只有在NGINX最初缓存它时附加到文件的Last-Modified标头中记录的时间后才会发送完整项目。