2010-11-05 83 views
0

的我们有一个云的设置是这样的:鱿鱼配置,以确保HTTP头匹配的缓存内容

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

我们支持在一些网页上的SSL,而不是别人。 perlbal层以外的所有内容仅处理未加密HTTP上的请求,因为perlbal解开了SSL,但它确实会添加一个X-Forwarded-Proto标头,以便应用程序知道是否使用了SSL。

如果请求点击量超过HTTP应用程序(阿帕奇),当该特定页面要求SSL重定向到HTTPS。

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

这是如何完成的?我们的应用程序发送:

Vary: X-Forwarded-Proto,Accept-Encoding 

我在发现有这方面的文章/文档很难和这Vary头部似乎是别人建议,但它不工作。无论指定SSL的X​​-Forwarded-Proto头还是其他,Xquid都会缓存内容。

回答

0

OMFG。

我们在对历史原因的.htaccess过这样的:

BrowserMatch "MSIE" brokenvary=1 
BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1 
BrowserMatch "Opera" !brokenvary 
SetEnvIf brokenvary 1 force-no-vary 

三种猜测会发生什么情况squid缓存一旦IE 6用户访问我们的网站。更改了标题。缓存策略被破坏。

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