Http Varnish:隐藏内部后端请求

Http Varnish:隐藏内部后端请求,http,varnish,Http,Varnish,这就是我的设想: 1) Varnish(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应

这就是我的设想:

1) Varnish(
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来获取图像

我的问题:如何配置varnish以在内部接收 从第一个后端响应(
127.0.0.1:8000
),并从 第二个后端(
172.16.217.132:80
),然后发送数据 给客户

谢谢。

步骤4

4) 该处理会产生一个新的URL,即:
http://172.16.217.132:80/a.png
(**如您所见,IP已更改)

你的意思是它会导致HTTP重定向吗?然后,您可以在vcl_fetch中检查后端响应状态代码(检查301、302等),使用位置头作为新url并重新启动。我找到了一个

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);
        }
}