这就是我的情景:
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
),然后发送数据
对客户?
感谢。
答案 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);
}
}