Amazon-Ec2

無法使用 ec2 + 應用程序負載均衡器獲得 websocket 連接

  • July 3, 2018

我有一個 aws 應用程序負載均衡器,在埠 9999 上有一個 https 偵聽器,轉發到埠 9999 上的一個組,目標是 ec2-instance。

如果我使用配置為我的域的主機名執行我的 websocket 伺服器api.example.com,那麼當客戶端嘗試打開 websocket 連接時,它會得到:

WebSocket 握手期間出錯:意外的響應程式碼:502

但是,如果我使用空字元串而不是域配置我的 websocket 伺服器,那麼它就可以正常連接!

這是有問題的,因為我打算在此實例上執行的伺服器在提供 websocket 主機名配置時才會自動啟動 websocket 伺服器,因此空白字元串意味著 websocket 伺服器永遠不會啟動!我寧願不必破解圖書館來解決這種情況。所以我想知道,為什麼在世界上一個空白字元串可以工作,但域名卻不行?

我嘗試了 localhost、盒子的 ip 等,所有結果都是 502,除了一個空白字元串!

通過將我的 websocket 伺服器主機設置為 0.0.0.0 解決了我的問題

ALB 不使用主機名進行執行狀況檢查。因此,如果您的伺服器不支持沒有主機名的請求,則健康檢查將失敗,從而導致訪問 ALB 時出現 5xx 錯誤。

  • 檢查 ALB 正在使用的目標組是否存在執行狀況檢查錯誤
  • 檢查您的應用程序伺服器日誌以獲取與健康檢查相關的錯誤

如果您的伺服器不支持此功能,您有兩種選擇:

  • 在您的伺服器上使用可以處理沒有主機名的請求的代理(例如 nginx),並在那里處理問題
  • 覆蓋 ALB 健康檢查埠,將其重定向到始終返回 HTTP 200 的內容(例如,Apache 在同一主機上執行,但在另一個埠上)。

引用自:https://serverfault.com/questions/918403