问题描述
frontend f1
bind *:443 accept-proxy
default_backend http_varnish
而且,在同一情况下,我有清漆
backend http_varnish
mode http
balance roundrobin
server varnish *:6081 check
问题是清漆没有响应并且超时。 我尝试在清漆中打开另一个端口
#varnish
..... -a :6088,PROXY -T .......
我不明白为什么,如果作为后端我直接向 apache 发送请求,它可以正常工作,而 varnish 没有响应。
显然,如果我删除了接受代理,并且不使用代理协议,清漆工作正常。
解决方法
您配置 HAProxy 的方式允许传入连接使用代理协议。
您需要做的是配置 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 中的代理意识。 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-For
标头还将包含原始客户端的 IP。
长话短说:好处多多。