![有没有办法巧妙地利用Nginx进行缓存?](https://linux22.com/image/589662/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E5%B7%A7%E5%A6%99%E5%9C%B0%E5%88%A9%E7%94%A8Nginx%E8%BF%9B%E8%A1%8C%E7%BC%93%E5%AD%98%EF%BC%9F.png)
Nginx 后面有一个 Apache。Nginx 用于在 Web 服务器之间进行负载平衡并缓存静态内容。唯一的问题是,每次更新 Web 应用程序时,我们都必须完全清除 Nginx 缓存(静态文件缓存设置的值相当高,一些静态文件经常更改,而其他则不更改)。
是否有一个巧妙的方法可以让 Nginx 定期检查文件自被 Nginx 缓存以来是否已被修改(注意:Apache 在响应标头中返回“日期”)。
答案1
您必须编写一个脚本,定期抓取您想要缓存的内部内容,并让该脚本抓取您更新的每个 URL。
在脚本中,设置 HTTP 标头(实际标头并不重要),然后使用proxy_cache_bypass强制 nginx 从上游检索它。
示例:您的缓存启动脚本设置 HTTP 标头X-Really-Get-It: true
。在 nginx.conf 中,您将设置:
proxy_cache_bypass $http_x_really_get_it;
nginx 将从上游而不是从缓存中获取文件,然后缓存结果。
如果你愿意并且能够使用第三方 nginx 模块,你也可以使用缓存清除模块。不过,它的文档记录似乎相当差。
答案2
只需使用正确的缓存信息提供您的内容 - 这将解决您的代理以及您和客户端之间的任何其他问题,例如
cache-control: max-age=86400; s-maxage=3600
指示浏览器缓存 1 天,但代理应缓存 1 小时。
但更好的解决方案是对更新的内容使用不同的 URL。