【问题标题】:HTTP authenticate all varnish requestsHTTP 验证所有清漆请求
【发布时间】:2013-11-16 22:15:44
【问题描述】:

我们正在尝试使用 Varnish 缓存来自我们经常访问的第三方服务的结果。不幸的是,当他们的服务出现故障时,我们的网站几乎无法正常运行。

我遇到的问题是我们连接的服务需要 http 身份验证访问我们点击的任何 URL。我希望能够在我的 default.vcl 文件中默认设置用户名和密码,以便在每个请求中自动包含身份验证。

【问题讨论】:

    标签: http basic-authentication varnish varnish-vcl


    【解决方案1】:

    您可以在 vcl_miss 和 vcl_pass 中设置后端请求的属性。

    对于 HTTP 基本身份验证,您可以执行以下操作:

    sub vcl_miss {
        if (req.backend == "backend2") {
            set bereq.http.Authorization = "Basic <base64string>";
        }
    }
    

    不支持对后端请求进行 HTTP 摘要身份验证。

    【讨论】:

      【解决方案2】:

      所以为了解决这个问题,我像这样修改了 HTTP 标头:

      sub vcl_recv {
        set req.http.Authorization = "Basic d2h5ZGlkeW91OmRlY29kZXRoaXM=";
      }
      

      编码部分是你要使用的用户名和密码的base64:

      echo -n "username:password" | base64
      

      【讨论】:

      • 设置 req.http.Authorization 将使默认 VCL 通过此请求。这个 sn-p 本质上禁用了 Varnish 缓存。 :(
      • 不,不是,是您的 VCL 的另一部分或默认的 VCL 代码(始终附加到您的配置)。见varnish-cache.org/docs/3.0/reference/vcl.html#examples。您需要在sub vcl_recv 结束之前或if (req.http.Authorization...(如果存在)之前手动return (lookup);
      猜你喜欢
      • 2012-02-19
      • 1970-01-01
      • 2023-02-22
      • 2016-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 2014-01-08
      相关资源
      最近更新 更多