![Squid 缓存问题](https://linux22.com/image/686331/Squid%20%E7%BC%93%E5%AD%98%E9%97%AE%E9%A2%98.png)
我想创建一个 cron 作业,它将删除我们的 squid 缓存并重新启动它。我这样做的原因是,当我将新构建的 javascript 代码上传到我们的网络服务器时,当我在指向我们的 squid 的浏览器中浏览我们的应用程序时,即使我清除了浏览器的缓存,我仍然会得到旧代码。
在我清除 squid 的缓存并重新启动它之后,它就开始工作了。
我真的需要一份工作来做这件事吗?还是说我们的 squid 中缺少配置?当然,我们仍然需要缓存,但当新的 Web 应用程序构建已上传时则不需要。
答案1
检查您的 squid.conf,确保没有 refresh_pattern 行告诉 Squid 不遵守/忽略 HTTP 缓存指令。这应该是您需要做的全部工作。Squid 将在需要时默认执行重新验证 (REFRESH/IMS) 检查,其余的由原始服务器决定。
确保您的服务器在每个响应上生成 Last-Modified 和 ETag 标头(如果可能)。Squid 3.5.21 之前的版本需要这些标头来重新验证。
如果您的更改是按已知的固定时间间隔进行的,则应发出 Cache-Control:max-age=N 和 Expires 标头,以告知 Squid 下一次更改何时发生。否则,如果时间不可预测,则应发出 Cache-Control:no-cache 标头。
您还需要确保当内容未发生更改时,服务器能够正确生成 304 响应。如果没有,请查看服务器文档以了解如何修复该问题。
答案2
您需要检查 Squid 是否正确配置,以便在每个缓存请求上检查上游,并If-Modified-Since
在每个请求上设置 HTTP 标头。
如果上游服务器发送了响应304 Not Modified
,则 Squid 可以发送现有的缓存版本。如果上游服务器回复了新版本,则 Squid 可以更新其缓存并发送文件的新版本。