您好,登錄后才能下訂單哦!
這篇文章主要講解了“Nginx的socket轉發端口如何配置”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Nginx的socket轉發端口如何配置”吧!
nginx 轉發 socket 端口常見場景:在線學習應用,在常規功能之外,增加一個聊天室功能,后端選擇 swoole 提供服務提供者,同時不想前端直接 ip:port 方式鏈接到服務,需要使用 nginx 進行轉發。
常規情況,我們可以在用戶頁面,直接建立 socket 鏈接,但這樣的操作會暴露端口,帶來一定的安全隱患,使用 nginx 進行轉發,可以隱藏端口。額外的問題就是一些 header 參數也需要在轉發過程中帶給 socket 服務提供者,其他只需要 nginx 處理一下從常規協議轉換到 websocket 就可以。
其中,"upgrade" 是 逐跳(hop-by-hop) 頭,無法從客戶端轉發到代理服務器,通過轉發代理,客戶端可以使用 connect 方法來規避此問題。但是,這不適用于反向代理,因為客戶端不知道任何代理服務器,并且需要在代理服務器上進行特殊處理。同時逐跳頭包含 "upgrade" 和 "connection" 都無法傳遞,則需要在轉換為 websocket 的時候帶上這兩個參數:例如:
location /chat/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header upgrade $http_upgrade; proxy_set_header connection "upgrade"; }
進階:讓轉發到代理服務器的 "connection" 頭字段的值,取決于客戶端請求頭的 "upgrade" 字段值。例如:
http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { ... location /chat/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header upgrade $http_upgrade; proxy_set_header connection $connection_upgrade; } }
注意:示例中的 http://backend 為一組負載均衡的服務器,只有單臺服務器的,可以寫成 proxy_pass http://127.0.0.1:9501; 這樣的。此外,默認情況下,在 60 秒內未傳送任何數據的鏈接將被關閉,時間可以使用 proxy_read_timeout 指令來延長。或者代理服務器可以配置定時發送 ping 幀來重置超時及檢查鏈接是否可用。
感謝各位的閱讀,以上就是“Nginx的socket轉發端口如何配置”的內容了,經過本文的學習后,相信大家對Nginx的socket轉發端口如何配置這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。