代码之家  ›  专栏  ›  技术社区  ›  d11wtq Vadim Baryshev

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

  •  0
  • d11wtq Vadim Baryshev  · 技术社区  · 15 年前

    我们有这样的云设置:

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

    X-Forwarded-Proto 使应用程序知道是否使用了SSL。

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

    Cache-Control: public ,squid将正确缓存该内容。问题是,如果用户在缓存后试图访问该资源的HTTP版本,squid会将其作为缓存命中处理,并通过HTTP返回缓存的资源,而实际上我们需要将其视为缓存未命中,因为X-Forwarded-Proto与原始请求不匹配。

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

    Vary: X-Forwarded-Proto,Accept-Encoding
    

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

    1 回复  |  直到 15 年前
        1
  •  0
  •   d11wtq Vadim Baryshev    15 年前

    天哪。

    出于历史原因,我们在.htaccess中有这个:

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

    去他妈的。把这个拿走是个好办法。现在一切正常。

    推荐文章