溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Nginx的socket轉(zhuǎn)發(fā)端口如何配置

發(fā)布時間:2022-05-21 10:11:40 來源:億速云 閱讀:485 作者:zzz 欄目:大數(shù)據(jù)

這篇文章主要講解了“Nginx的socket轉(zhuǎn)發(fā)端口如何配置”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Nginx的socket轉(zhuǎn)發(fā)端口如何配置”吧!

nginx 轉(zhuǎn)發(fā) socket 端口常見場景:在線學習應用,在常規(guī)功能之外,增加一個聊天室功能,后端選擇 swoole 提供服務提供者,同時不想前端直接 ip:port 方式鏈接到服務,需要使用 nginx 進行轉(zhuǎn)發(fā)。

常規(guī)情況,我們可以在用戶頁面,直接建立 socket 鏈接,但這樣的操作會暴露端口,帶來一定的安全隱患,使用 nginx 進行轉(zhuǎn)發(fā),可以隱藏端口。額外的問題就是一些 header 參數(shù)也需要在轉(zhuǎn)發(fā)過程中帶給 socket 服務提供者,其他只需要 nginx 處理一下從常規(guī)協(xié)議轉(zhuǎn)換到 websocket 就可以。

其中,"upgrade" 是 逐跳(hop-by-hop) 頭,無法從客戶端轉(zhuǎn)發(fā)到代理服務器,通過轉(zhuǎn)發(fā)代理,客戶端可以使用 connect 方法來規(guī)避此問題。但是,這不適用于反向代理,因為客戶端不知道任何代理服務器,并且需要在代理服務器上進行特殊處理。同時逐跳頭包含 "upgrade" 和 "connection" 都無法傳遞,則需要在轉(zhuǎn)換為 websocket 的時候帶上這兩個參數(shù):例如:

location /chat/ {
  proxy_pass http://backend;
  proxy_http_version 1.1;
  proxy_set_header upgrade $http_upgrade;
  proxy_set_header connection "upgrade";
}

進階:讓轉(zhuǎn)發(fā)到代理服務器的 "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 秒內(nèi)未傳送任何數(shù)據(jù)的鏈接將被關(guān)閉,時間可以使用 proxy_read_timeout 指令來延長?;蛘叽矸掌骺梢耘渲枚〞r發(fā)送 ping 幀來重置超時及檢查鏈接是否可用。

感謝各位的閱讀,以上就是“Nginx的socket轉(zhuǎn)發(fā)端口如何配置”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對Nginx的socket轉(zhuǎn)發(fā)端口如何配置這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI