如果存在授权标头,则禁用 mod_cache

如果存在授权标头,则禁用 mod_cache

我的网站向已登录和已注销的用户提供相同的页面。已登录用户的请求具有 Authorization 标头。我想使用 Apache 的 mod_cache 仅向已注销的用户提供缓存页面。

从新服务器开始,我可以使用 Authorization 标头发出请求,这些请求不会被缓存。如果我以已注销用户的身份发出请求,则该请求会被缓存。问题是,后续使用 Authorization 标头的请求会返回缓存的结果。

如何针对带有 Authorization 标头的请求禁用 mod_cache?

编辑:当我写出这篇文章时,我想到了一个似乎可行的解决方案。

RequestHeader set Cache-Control max-age=300 "expr=-z %{HTTP:Authorization}"

这会在每个没有 Authorization 标头的请求上设置 Cache-Control 标头。有趣的是,已登录请求的响应现在包含标头“Vary: Authorization”。

这是一个好的解决方案吗?我应该使用 Varnish 而不是 mod_cache 吗?

谢谢

答案1

是否应该使用 varnish 的问题应该考虑大量您未告诉我们的变量。您所实现的是最接近您描述的要求的,我能想到的也最接近。不过我想验证 mod_cache/varnish 是否正确遵守了“Vary”标头。

但是,您需求中的谓词相当奇怪。我怀疑,如果您将来想要更改这些谓词,您可能会遇到问题 - 例如切换到不同的身份验证机制。

相关内容