我有HaProxy终止SSL并将请求传递回清漆,然后服务于缓存页面或Nginx请求。但是,Varnish似乎将HaProxy的请求视为HTTP/1而不是HTTP/2,并且无法提供服务。强制清漆使用代理协议1
我可以在Nginx的看到记录以下当我尝试打一个页面:
" while reading PROXY protocol, client: 127.0.0.1, server: 127.0.0.1:8181
2016/08/11 06:53:31 [error] 5682#0: *1 broken header: "GET/HTTP/1.1
Host: www.example.com
User-Agent: curl/7.50.2-DEV
Accept: */*
X-Forwarded-For: IP_Removed
Accept-Encoding: gzip
X-Varnish: 32777
我发现的东西,涉及到这个here其中指出,这样做的原因是,Nginx的不使用v2 PROXY only v1。所以,由于这个原因,我强制使用发送代理而不是send-proxy-v2交换机在HaProxy中使用协议1。但是当它变成清漆时,我认为清漆会以某种方式将其转换为协议2,从而导致它无法与Nginx正常通信。
我已经从等式中删除了清漆,并将HaProxy直接连接到Nginx,并通过HTTP/2完美工作。问题是在Varnish堆栈中发生了一些事情,可能的怀疑是Varnish使用的代理协议v2。
因此,长话短说,我该如何强制Varnish坚持使用PROXY1而不是PROXY2协议?我已经尝试将PROXY1添加到启动守护进程选项中,但Varnish不会接受该选项。任何帮助表示赞赏。谢谢!
更新 - 我在HaProxy后端使用send-proxy-v2开关测试了HaProxy> Nginx,并且在将Varnish引入堆栈时导致相同的问题。切换回HaProxy上的发送代理可以解决问题。所以,我确信问题是使用协议2而不是协议1的Varnish。但是如何告诉它不要?
你确定你是在谈论HTTP/2?这与PROXY v2协议无关。 Varnish不会说HTTP/2,它会在Varnish 5.x中引入。 –
也许我对自己感到困惑,但我的理解是,当处理HTTP/2时,HaProxy作为TCP而不是HTTP,因此有必要在后端使用send-proxy。 Nginx设置为通过proxy_protocol开关接收此信息。我了解Varnish不是HTTP/2或者是SSL,但它应该将协议传回给Nginx否? – d1ch0t0my