【问题标题】:Varnish backend host directly in vcl_recv?直接在 vcl_recv 中清漆后端主机?
【发布时间】:2015-03-19 09:48:58
【问题描述】:

我可以直接在 vcl_recv 中提及后端主机吗?

   sub vcl_recv{
       if (req.http.host=="www.yourdomain.com.a-free-cdn.com") {
           set req.http.host = "www.yourdomain.com";
           set req.backend.host = "www.yourdomain.com";
       }
   }

如果这是不可能的,有没有其他方法可以做到这一点?实际上,我事先对后端一无所知。

【问题讨论】:

    标签: varnish varnish-vcl


    【解决方案1】:

    是的,我认为您在 vcl_recv() 中指的是 req.backend/req.backend_hint,在 Varnish 3 语法中:

    backend www {
      .host = "www.example.com";
      .port = "http";
    }
    
    sub vcl_recv {
      if (req.http.host ~ "(?i)^(www.)?example.com$") {
        set req.backend = www;
      }
    }
    

    Varnish 4 语法中:

    backend www {
      .host = "www.example.com";
      .port = "http";
    }
    
    sub vcl_recv {
      if (req.http.host ~ "(?i)^(www.)?example.com$") {
        set req.backend_hint = www;
      }
    }
    

    【讨论】:

    • 不,我写vcl的时候不知道后端。我不能像你提到的那样写后端。后端域名随请求一起提供。
    • 不,您必须提前定义后端。如果这是您的意图,则不能使用 varnish 作为转发代理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2016-09-21
    • 1970-01-01
    • 2014-10-25
    • 2021-10-10
    • 2015-10-11
    • 2017-11-24
    相关资源
    最近更新 更多