我有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