我最近在切换到 Cloudflare 后遇到了一个问题,解决方案是基本上阻止 Cloudflare 缓存 404 响应。
在我们的负载平衡多服务器设置中,偶尔会发生 404,但它们很快被 rsync(通过 lsyncd)修复。在 Cloudflare 之前,对 404ed 文件的重新请求将很快变成 200,因为 rsync 完成了它的工作。
但是,由于 Cloudflare 根据缓存标头缓存所有数据,并且 apache 和 nginx 都没有为 404 发送 no-cache 标头,因此 Cloudflare 最终会缓存 404 响应一段时间。
我一直在寻找一种解决方案,可以在 apache 和 nginx 中为 404 全局添加这样的标头(全局,对于所有托管域),但到目前为止都是空白的。
任何人都可以帮忙吗?
谢谢你。
您不能使用 error_page 指令,然后使用添加的标头单独处理该位置吗?
例如在 Nginx 中:
你也可以这样做:
在 apache 2.4 中,您可以尝试以下操作:
这
always
很重要,因为这是一个:<FilesMatch>
您说的是所有 404,但为了完整参考,当然将其包装在 a 中或<LocationMatch>
限制范围 可能是有意义的。我相信这是 apache 2.4 中的一项新功能,因为
expr
在 mod_headers 文档的 2.2 版本中没有使用条件。curl -I [foo]
没有这个配置的测试:curl -I [foo]
使用此配置进行测试:资料来源:
http://httpd.apache.org/docs/current/mod/mod_headers.html
我在这个问题上的五分钱-
在我们的 PHP 项目中,我们只有很少的 404 页,所以我决定在 PHP 级别使用 PHP header() 函数