鱿鱼配置以确保HTTP标头匹配缓存内容的标题
-
29-09-2019 - |
题
我们有这样的云设置:
User Request -> Perlbal (SSL unwrapping) -> Squid (Caching) -> Apache -> HTTP Response
我们支持某些页面,而不是在其他页面上支持SSL。除了perlbal层之外的所有内容仅处理未加密的http,因为perlbal拆开了SSL,但是它确实添加了一个 X-Forwarded-Proto
标题以使应用程序知道是否使用了SSL。
如果请求通过HTTP登录应用程序(APACHE),则当该特定页面要求SSL重定向到HTTPS时。
当要求安全资源的请求到达我们的申请时,如果应用程序发送 Cache-Control: public
, ,鱿鱼缓存正确的内容。问题是,如果用户在缓存后尝试访问该资源的HTTP版本,则鱿鱼将其处理为缓存命中并通过HTTP返回缓存资源,而实际上我们需要将其视为缓存,因为x - 寄生proto与原始请求不匹配。
这是怎么做的?我们的申请发送:
Vary: X-Forwarded-Proto,Accept-Encoding
我很难找到有关此的任何文章/文档,而这个不同的标题似乎是其他人建议的,但它不起作用。鱿鱼不论指示SSL或其他方式的X-Forward-Proto标头,都提供缓存的内容。
解决方案
OMFG。
出于历史原因,我们在.htaccess中拥有了这一点:
BrowserMatch "MSIE" brokenvary=1
BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
BrowserMatch "Opera" !brokenvary
SetEnvIf brokenvary 1 force-no-vary
三个猜测一旦IE 6用户访问我们的网站,鱿鱼缓存会发生什么。删除了变化的标题。缓存策略破坏了。
螺丝即。删除这是一个不错的举动。现在一切正常。
不隶属于 StackOverflow