HaProxy ProxyProtocol 和 Varnish 没有响应

HaProxy ProxyProtocol and Varnish not respond

我有一个接受代理连接的 HaProxy

frontend f1
    bind *:443 accept-proxy
    default_backend http_varnish

而且,在同一个实例中,我有清漆

backend http_varnish
   mode http
   balance roundrobin
   server varnish *:6081 check

问题是 varnish 没有响应并且超时。 我尝试在 varnish

中打开另一个端口
#varnish
..... -a :6088,PROXY -T .......

我不明白为什么,如果作为后端我直接向 apache 发送请求它工作正常,而 varnish 没有响应。

显然,如果我删除 accept-proxy,并且不使用代理协议,清漆工作正常。

您配置 HAProxy 的方式允许传入连接使用 PROXY 协议。

您需要做的是配置 HAProxy 通过 PROXY 协议连接到后端。

只需将 send-proxy-v2 添加到您的服务器定义中,如下所示:

backend http_varnish
   mode http
   balance roundrobin
   server varnish 192.168.1.100:6088 check send-proxy-v2

您还必须更新 Varnish 所在的端点。在这种情况下,我把它变成了 192.168.1.100:6088。请相应地修复此问题并确保使用正确的主机名和端口。

成功完成后,您就可以开始受益于 Varnish 中的 PROXY 意识。 Varnish 中的 vmod_proxy 模块允许您获取有关客户端连接的信息。参见 http://varnish-cache.org/docs/6.0/reference/vmod_generated.html#vmod-proxy

最后可以查看是否通过TLS建立连接,如下图:

sub vcl_recv {
    if(proxy.is_ssl()) {
        //Do stuff
    } else {
        //Do other stuff
    }
}

X-Forwarded-Forheader也会包含原始客户端的IP。

长话短说:好处很多。