的我们有一个云的设置是这样的:鱿鱼配置,以确保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都会缓存内容。