0

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

非常感谢

西蒙

4

2 回答 2

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;
}
于 2017-12-06T09:27:30.280 回答
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';
    }
    ...
}

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

于 2012-05-12T15:42:20.260 回答