Amazon-Web-Services

為什麼帶有 HTTP 協議的 AWS 經典 ELB 不適用於 websocket?

  • March 22, 2020

我知道有一個適用於 websockets 的 ALB 和 NLB 選項。我不明白為什麼帶有 HTTP 協議的經典 ELB 不適用於 websocket 連接,儘管在實例中有配置為添加連接和升級標頭的 Nginx。一旦我將它切換到 TCP 協議,它就可以工作。當中間有 HTTP 代理時,你能解釋一下這個協議是如何工作的嗎?

它仍然使用相同的 TCP,一旦客戶端到達伺服器並且 Nginx 添加了升級標頭,帶有切換協議消息的伺服器響應應該到達客戶端,然後他們只使用已建立的 HTTP 連接的 TCP。它在 ELB 上丟棄此連接、響應緩衝或只是丟棄所有非 HTTP 流量的原因是什麼?

所以 Nginx 發送到 ELB

HTTP/1.1 101 Switching Protocols
Server: nginx/1.13.1
Date: Sat, 21 Mar 2020 07:53:38 GMT
Connection: upgrade
Upgrade: websocket
Sec-WebSocket-Accept: PozdkhgL/Zdkgh3kwu0KkACFCt0=

但是 ELB 永遠不會將其返回給客戶端,並且請求會超時。

經典 ELB 不支持 Websocket。為什麼不這樣做不是 AWS 發布的內容。正如您所指出的,從下面參考中的圖表中,它特別指出 ALB 和 NLB 支持 Websocket。為什麼 Classic 不支持它們並沒有披露。

底線,如果你想使用帶有 Websocket 的 ELB,請使用 ALB 或 ELB

參考

彈性負載平衡功能

我不知道為什麼 ELB 不支持 websockets。但是如果供應商說他們不支持它,你就應該堅持下去。

嘿,這是他們的平台。

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