【问题标题】:Squid config to ensure HTTP header matches that of the cached contentSquid 配置以确保 HTTP 标头与缓存内容的标头匹配
【发布时间】:2010-11-05 02:31:22
【问题描述】:

我们有这样的云设置:

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,squid 会正确缓存该内容。问题是,如果用户在缓存后尝试访问该资源的 HTTP 版本,squid 会将其作为缓存 HIT 处理并通过 HTTP 返回缓存的资源,而实际上我们需要将其视为缓存 MISS,因为 X -Forwarded-Proto 与原始请求不匹配。

这是怎么做到的?我们的应用程序发送:

Vary: X-Forwarded-Proto,Accept-Encoding

我很难找到任何关于此的文章/文档,这个 Vary 标题似乎是其他人建议的,但它不起作用。 Squid 提供缓存的内容,不管 X-Forwarded-Proto 标头是否指示 SSL。

【问题讨论】:

    标签: apache https http-headers squid cache-control


    【解决方案1】:

    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 用户访问我们的网站,鱿鱼缓存会发生什么。删除了变化标题。缓存策略损坏。

    拧 IE。删除这是一个很好的举措。现在一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 2021-11-17
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      相关资源
      最近更新 更多