Apache Squid配置以确保HTTP头与缓存内容的头匹配

Apache Squid配置以确保HTTP头与缓存内容的头匹配,apache,https,http-headers,squid,cache-control,Apache,Https,Http Headers,Squid,Cache Control,我们有这样的云设置: User Request -> Perlbal (SSL unwrapping) -> Squid (Caching) -> Apache -> HTTP Response 我们在某些页面上支持SSL,而在其他页面上不支持SSL。perlbal层之外的所有内容都只处理未加密HTTP上的请求,因为perlbal打开了SSL,但它确实添加了一个X-Forwarded-Proto头,以便应用程序知道是否使用了SSL 如果请求通过HTTP命中应用程序(Ap

我们有这样的云设置:

User Request -> Perlbal (SSL unwrapping) -> Squid (Caching) -> Apache -> HTTP Response
我们在某些页面上支持SSL,而在其他页面上不支持SSL。perlbal层之外的所有内容都只处理未加密HTTP上的请求,因为perlbal打开了SSL,但它确实添加了一个
X-Forwarded-Proto
头,以便应用程序知道是否使用了SSL

如果请求通过HTTP命中应用程序(Apache),当该特定页面需要SSL时,它将重定向到HTTPS

当安全资源请求到达我们的应用程序时,如果应用程序发送
缓存控制:public
,squid会正确缓存该内容。问题是,如果用户在缓存后尝试访问该资源的HTTP版本,SQUID将其处理为缓存命中,并通过HTTP返回缓存的资源,而事实上,我们需要将其视为缓存丢失,因为X-NotoDeD-PROTO与原始请求不匹配。 这是怎么做到的?我们的应用程序发送:

Vary: X-Forwarded-Proto,Accept-Encoding
我很难找到任何关于这个的文章/文档,这个标题似乎是其他人建议的,但它不起作用。Squid为缓存内容提供服务,而不管X-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
三个猜测一旦IE6用户访问我们的站点,squid缓存会发生什么。将收割台拆下。缓存策略被破坏

去你的,这是一个很好的举动。现在一切正常