有没有办法巧妙地使用Nginxcaching?

我们在Nginx后面有一个Apache。 Nginx用来在web服务器之间进行负载平衡,并caching静态内容。 唯一的问题是,每次Web应用程序更新时,我们都必须完全清除Nginxcaching(静态文件caching设置为相当高的值,一些静态文件经常改变其他人不)。

有没有一种巧妙的方式让Nginx定期检查文件是否被修改(注意:Apache在响应头文件中返回“Date”),因为时间文件已被Nginxcaching。

您必须编写一个脚本来定期抓取您要caching的内部内容,并让该脚本抓取您更新的每个URL。

在脚本中,设置一个HTTP标头(实际的标头并不重要),然后使用proxy_cache_bypass强制nginx从上游检索它。

例如:您的caching启动脚本设置HTTP标头X-Really-Get-It: true 。 在nginx.conf中你将设置:

 proxy_cache_bypass $http_x_really_get_it; 

nginx会从上游而不是从caching中获取文件,然后caching结果。

如果您愿意且能够使用第三方nginx模块,则还可以使用cache_purge模块。 尽pipe如此,它似乎相当不好。

只需用正确的caching信息为您的内容提供服务 – 这将解决您的代理以及您和客户之间的任何问题,例如

 cache-control: max-age=86400; s-maxage=3600 

指示浏览器caching1天,但代理caching1小时。

但更好的解决scheme是使用不同的URL来更新内容。