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