这是我的场景:
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) That processing results in a new URL, i.e:
http://172.16.217.132:80/a.png
(**As you can see the IP has changed)
您是说它会导致 HTTP 重定向吗?然后您可以检查 vcl_fetch 中的后端响应状态代码(检查 301、302 等),使用 Location header 作为您的新 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);
}
}
关于http - Varnish:隐藏内部后端请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11034654/