清漆:隐藏内部后端请求

时间:2012-06-14 13:54:23

标签: http varnish

这就是我的情景:

1)清漆(172.16.217.131:80),收到客户的请求,即: http://172.16.217.131:80/a.png

2)请求被转发到默认后端(127.0.0.1:8000

3)默认后端接收请求并处理它

4)该处理产生一个新的URL,即:http://172.16.217.132:80/a.png(**你可以看到IP已经改变了)

5)172.16.217.132:80是Varnish配置文件中的另一个后端

6)新URL指向应由Varnish提供的资源 (该资源通常是图像)

我的问题是:客户端需要执行2次GET才能获取图像。

我的问题:如何配置清漆以在内部接收 来自第一个后端(127.0.0.1:8000)的响应,并从中获取数据 第二个后端(172.16.217.132:80),然后发送数据 对客户?

感谢。

1 个答案:

答案 0 :(得分:2)

步骤4;

  

4)该处理产生一个新的URL,即:   http://172.16.217.132:80/a.png(**您可以看到IP已更改)

你的意思是它导致HTTP重定向?然后你可以检查vcl_fetch中的后端响应状态代码(检查301,302等),使用Location头作为新的url并重新启动。我找到了great example of this in the Varnish Book

sub vcl_fetch {
        if (req.restarts == 0 &&
                 req.request == "GET" &&
                 beresp.status == 301) {
                set beresp.http.location = regsub(beresp.http.location,"^http://","");
                set req.http.host = regsub(beresp.http.location,"/.*$","");
                set req.url = regsub(beresp.http.location,"[^/]*","");
                return (restart);
        }
}