如何在代理后面使用varnish-cache

时间:2012-05-10 11:04:12

标签: caching proxy varnish

我想使用Varnish-cache来缓存我的Web应用程序的一些依赖性,但我被困在公司代理设置之后。有没有办法告诉Varnish-cache通过代理向其他服务发出http请求?

非常感谢

西蒙

2 个答案:

答案 0 :(得分:1)

对于varnish4,这不起作用。做一些网络跟踪,看起来varnish v4做相对req.url,其中一个代理需要一个绝对的req.url 我处于一个裂脑DNS世界,所以我的后端与前端用户看到的域名相同(只是以不同方式重新调整)。因此,我使用req.url变量中的req.http.host创建一个绝对URL。

sub vcl_recv {
    # Setting backend hint
    set req.backend_hint = varnish_backend;
    if (req.url !~ "mydomain.com") {
      set req.url ="http://" + req.http.host + req.url;
}

答案 1 :(得分:0)

只要你能用代理讲HTTP,你就可以做任何你想做的事。

示例设置:

[back-end A]          [back-end B]
     |                     |
     ---[corporate proxy]---
                |
            [Varnish]

将默认端口从80更改为代理端口(例如8080)...

backend corp_proxy {
  .host = "proxy.localnet";
  .port = "8080";
}
...
sub vcl_recv {
    ...
    /* check if back-end A or B and use proxy as backend */
    if (req.http.host == "backend-a.example.com" || req.http.host == "backend-b.example.com") {
        set req.backend = corp_proxy;
        set req.http.X-Proxy-Pass = 'mypass';
    }
    ...
}

您甚至可以在请求中设置自定义标头(例如某些静态密钥或其他)。