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提供 (该资源一般是图片)

我的问题是:客户端需要执行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/

相关文章:

unix - Grep 多个字符串,然后替换文本

php - 无法删除标题 "vary: user agent"

http - multipart/form-data,字段的默认字符集是什么?

http - Golang CSRF 在结构中保存模板字段

javascript - 将 Javascript 中的 Java HashMap 理解为 JSON 对象

java - 在 Java Servlet 应用程序中为 HTTP 201 响应设置 Location header 的正确方法是什么

http - 用户登录时不显示上次修改的缓存

WordPress、 Varnish 、 Apache 、SSL

php - Varnish 301重定向显示白页

caching - 需要帮助分析 VarnishStat 结果