鱿鱼SSL解开后,不正确地提供cachingHIT

我们有这样的云安装:

User Request -> Perlbal (SSL unwrapping) -> Squid (Caching) -> Apache -> HTTP Response 

我们在一些页面上支持SSL,而不是在其他页面上。 除了perlbal层之外的所有东西都只能通过未encryption的HTTP处理请求,因为perlbal解开了SSL,但是它会添加一个X-Forwarded-Proto头,以便应用程序知道是否使用了SSL。

如果请求通过HTTP访问应用程序(Apache),那么当该特定页面需要SSL时,它将redirect到HTTPS。

当一个安全资源的请求到达我们的应用程序,如果应用程序发送Cache-Control: public ,鱿鱼caching内容正确。 问题是,如果用户在caching后试图访问该资源的HTTP版本,则squid会将其作为cachingHIT进行处理,并通过HTTP返回caching的资源,实际上我们需要将其视为cachingMISS,因为X -Forwarded-Proto与原始请求不匹配。

这是怎么做的? 我们的申请发送:

 Vary: X-Forwarded-Proto,Accept-Encoding 

我很难find任何文章/文件,这个Vary头似乎是别人的build议,但它不工作。 Squid提供高速caching的内容,而不pipeX-Forwarded-Proto头是否指示SSL或其他。

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用户访问我们的网站,鱿鱼caching会发生什么。 更改标题删除。 caching策略被打破。

螺丝IE。 取消这是一个很好的举措。 现在一切正常。