HAProxy 後端 - 如何連接到遠端伺服器?

HAProxy 後端 - 如何連接到遠端伺服器?

大家下午好,

我是網站託管領域的新手,但仍然感覺自己正在學習在大海中游泳。我想要做的是設定 HAproxy 將請求轉發到後端的遠端伺服器。該伺服器採用 SSL,位於 Cloudflare 後方。

我搜尋了整個互聯網,但直到現在我還找不到我的問題的直接明確答案。我已經提取了 haproxy 映像,並在具有外部 haproxy.cfg 檔案的容器中使用它。沒有人闡明您是否能夠用作後端伺服器、遠離網路(非本地端)的伺服器,以及如何使用 SSL 進行此通訊。如果你們中有人對此有任何了解,我將不勝感激,如果這是否可行以及如何可行,我將不勝感激。

我現在在伺服器 NginxProxyManager 容器中使用,並且正在研究 HAProxy 的負載平衡功能。到目前為止,我已經成功地對本地容器進行了循環,但是對於離開的伺服器,我總是在統計資料中得到「停機維護」的回應。我還在 ha-proxy 容器的終端機中運行了 wget 命令,它可以看到外部世界。如果我從 HAProxy 容器 Google 內部 ping 通,它就會 ping 通它。所有容器都連接到橋接網路和 docker 中使用者建立的網路(橋接驅動程式)。這就是為什麼我完全困惑的原因。所以,主要問題是:這能做到嗎?

  1. 客戶端向 HAProxy 發出 https 請求
  2. 透過循環,我(想)在本地容器和遠端伺服器之間滾動
  3. 當我進入“遠端伺服器”回合時,我想從後端發送正確的伺服器主機(重寫 - 我已經可以這樣做,但對於本機容器)以及這是 SSL 請求的資訊。
  4. 然後 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 到伺服器的加密是不同的?)但是從後端連接是不可能的?

簡而言之:

  1. HAProxy docker 映像未啟用 QUIC - 至少是我擁有的一個 (alpine)
  2. Cloudflare 預設已啟動 QUIC 作為其產品的通訊協議,並且您無法變更它。
  3. 這兩者的合作顯然是不可能的,並且它會向您展示“SSL 握手失敗”
  4. 為了修復它,請使用不支援最新技術通訊協定的提供者 - 好吧,目前這只是緩解措施,沒有解決方案。
  5. HAProxy 網站提供了一種從 github 重新編譯 HAProxy 並支援 QUIC 的方法,我稍後會研究它...

相關內容