Nginx反向代理WebSocket連接錯誤怎麼解決

Nginx作爲Web服務器一箇重要的功能是反向代理,可用於管理從外部網絡到內部網絡的連接或任何特定請求。有些用戶在本地socket測試無誤後部署發現WebSocket connection to “xxx/xxx̶ filed ,導致Nginx反向代理的連接錯誤,這時該怎麼解決?下面一起來了解下。

相關閱讀:《Nginx反向代理服務器配置教程》

從.3.3版本開始,Nginx實現了特殊的操作模式,如果代理服務器返迴帶有代碼0(切換協議)的響應,並且客戶端通過請求中的“Upgde”標頭。Upgde和Connection在內的標頭不會從客戶端傳遞到代理服務器,因此爲了讓代理服務器瞭解將協議切換到WebSocket,需要在反向配置中Nginx Loction中添加以下代碼:

loction /cht/ {

poxy_pss http://bckend;

poxy_http_esion .;

poxy_set_hede Upgde $http_upgde;

poxy_set_hede Connection “upgde̶;

}

一箇更復雜的示例,代理服務器請求中的“Connection”標頭字段的值取決於客戶端請求標頭中“Upgde”字段的存在,例如:

http {

mp $http_upgde $connection_upgde {

defult upgde;

̶ close;

}

see {

loction /cht/ {

poxy_pss http://bckend;

poxy_http_esion .;

poxy_set_hede Upgde $http_upgde;

poxy_set_hede Connection $connection_upgde;

}

}

默認情況下,如果Nginx代理服務器在60秒內沒有傳輸任何數據,連接將會被關閉。這裏我們可以使用poxy_ed_timeout指令增加此超時,或者代碼服務器可以配置爲定期發送WebSocket ping幀以重置超時並檢查連接是否仍然存在。