大家下午好,
我是網站託管領域的新手,但仍然感覺自己正在學習在大海中游泳。我想要做的是設定 HAproxy 將請求轉發到後端的遠端伺服器。該伺服器採用 SSL,位於 Cloudflare 後方。
我搜尋了整個互聯網,但直到現在我還找不到我的問題的直接明確答案。我已經提取了 haproxy 映像,並在具有外部 haproxy.cfg 檔案的容器中使用它。沒有人闡明您是否能夠用作後端伺服器、遠離網路(非本地端)的伺服器,以及如何使用 SSL 進行此通訊。如果你們中有人對此有任何了解,我將不勝感激,如果這是否可行以及如何可行,我將不勝感激。
我現在在伺服器 NginxProxyManager 容器中使用,並且正在研究 HAProxy 的負載平衡功能。到目前為止,我已經成功地對本地容器進行了循環,但是對於離開的伺服器,我總是在統計資料中得到「停機維護」的回應。我還在 ha-proxy 容器的終端機中運行了 wget 命令,它可以看到外部世界。如果我從 HAProxy 容器 Google 內部 ping 通,它就會 ping 通它。所有容器都連接到橋接網路和 docker 中使用者建立的網路(橋接驅動程式)。這就是為什麼我完全困惑的原因。所以,主要問題是:這能做到嗎?
- 客戶端向 HAProxy 發出 https 請求
- 透過循環,我(想)在本地容器和遠端伺服器之間滾動
- 當我進入“遠端伺服器”回合時,我想從後端發送正確的伺服器主機(重寫 - 我已經可以這樣做,但對於本機容器)以及這是 SSL 請求的資訊。
- 然後 NginxProxyManager 或另一個 HAProxy 會將其轉移到那裡連接的容器,以取得回應將其傳回(第一個)HAProxy,然後將後者傳送回客戶端。
我什至不確定這是否可能。看看以下內容。它確實適用於本地容器,但不適用於遠端伺服器。它發送請求並重寫 Host 標頭的名稱。這是 haproxy.cfg
global
maxconn 4000
daemon
defaults
mode http
default-server init-addr last,libc,none
option http-keep-alive
option redispatch
retries 3
timeout connect 10s
timeout client 1m
timeout server 1m
option forwardfor
resolvers mynameservers
nameserver ns2 8.8.8.8:853
frontend stats
bind *:8500
stats enable
stats uri /
stats refresh 10s
frontend ft
bind 0.0.0.0:443 ssl crt /usr/local/etc/haproxy/ha_trial.pem
default_backend bt2
backend bt2
balance roundrobin
http-send-name-header Host
server web1 web1:8080 check
server web2 web2:8080 check
server web3 web3:8080 check
server myback.mysite.com myback.mysite.com:443 ssl verify none resolvers mynameservers
## the latter does not work - it ends at down for maintenance in statistics and in logs it says: Layer6 invalid response, info: "SSL handshake failure" while it is "verify none"
如果您知道的話可以幫助我回答和/或提供一些參考資料,那麼所有像我這樣的人,尤其是我,將不勝感激。
謝謝
答案1
此案例正是 SSL 握手失敗案例,因為 HAProxy docker 映像未啟用 QUIC,且後端位於預設支援 QUIC 的 Cloudflare 之後。如果我使用在 https 通訊協定中未啟用 QUIC 的其他網域,一切都會變得有趣。我也很好奇為什麼它對前端和後端的處理方式不同?在前端它理解 QUIC(?-或者你和 cloudflare 之間是 QUIC,而 cloudflare 到伺服器的加密是不同的?)但是從後端連接是不可能的?
簡而言之:
- HAProxy docker 映像未啟用 QUIC - 至少是我擁有的一個 (alpine)
- Cloudflare 預設已啟動 QUIC 作為其產品的通訊協議,並且您無法變更它。
- 這兩者的合作顯然是不可能的,並且它會向您展示“SSL 握手失敗”
- 為了修復它,請使用不支援最新技術通訊協定的提供者 - 好吧,目前這只是緩解措施,沒有解決方案。
- HAProxy 網站提供了一種從 github 重新編譯 HAProxy 並支援 QUIC 的方法,我稍後會研究它...