1

那是我的场景:

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

1 回答 1

2

通过步骤4;

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

您的意思是它会导致 HTTP 重定向吗?然后您可以检查 vcl_fetch 中的后端响应状态代码(检查 301、302 等),使用 Location 标头作为您的新 url 并重新启动。我在 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);
        }
}
于 2012-06-17T13:28:52.103 回答