Nginx轉(zhuǎn)發(fā)socket端口配置詳解
Nginx 轉(zhuǎn)發(fā) socket 端口常見場景:在線學(xué)習(xí)應(yīng)用,在常規(guī)功能之外,增加一個聊天室功能,后端選擇 swoole 提供服務(wù)提供者,同時不想前端直接 ip:port 方式鏈接到服務(wù),需要使用 Nginx 進行轉(zhuǎn)發(fā)。
常規(guī)情況,我們可以在用戶頁面,直接建立 socket 鏈接,但這樣的操作會暴露端口,帶來一定的安全隱患,使用 Nginx 進行轉(zhuǎn)發(fā),可以隱藏端口。額外的問題就是一些 header 參數(shù)也需要在轉(zhuǎn)發(fā)過程中帶給 socket 服務(wù)提供者,其他只需要 Nginx 處理一下從常規(guī)協(xié)議轉(zhuǎn)換到 Websocket 就可以。
其中,"Upgrade" 是 逐跳(hop-by-hop) 頭,無法從客戶端轉(zhuǎn)發(fā)到代理服務(wù)器,通過轉(zhuǎn)發(fā)代理,客戶端可以使用 CONNECT 方法來規(guī)避此問題。但是,這不適用于反向代理,因為客戶端不知道任何代理服務(wù)器,并且需要在代理服務(wù)器上進行特殊處理。同時逐跳頭包含 "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ā)到代理服務(wù)器的 "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 為一組負載均衡的服務(wù)器,只有單臺服務(wù)器的,可以寫成 proxy_pass http://127.0.0.1:9501; 這樣的。
此外,默認情況下,在 60 秒內(nèi)未傳送任何數(shù)據(jù)的鏈接將被關(guān)閉,時間可以使用 proxy_read_timeout 指令來延長?;蛘叽矸?wù)器可以配置定時發(fā)送 ping 幀來重置超時及檢查鏈接是否可用。
參考鏈接: Nginx Websocket proxying
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
nginx的location配置導(dǎo)致網(wǎng)關(guān)返回404問題
這篇文章主要介紹了nginx的location配置導(dǎo)致網(wǎng)關(guān)返回404問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
nginx中g(shù)zip壓縮提升網(wǎng)站速度的實現(xiàn)方法
這篇文章主要介紹了nginx中g(shù)zip壓縮提升網(wǎng)站速度的實現(xiàn)方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08
nginx?status配置及參數(shù)配置小結(jié)
本文主要介紹了nginx?status配置及參數(shù)配置,其實要監(jiān)控Nginx的狀態(tài)非常簡單,它內(nèi)建了一個狀態(tài)頁,只需修改Nginx配置啟用Status即可,感興趣的可以了解一下2024-04-04
Nginx rewrite跳轉(zhuǎn)應(yīng)用場景詳解
這篇文章主要介紹了Nginx rewrite跳轉(zhuǎn)應(yīng)用場景詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11

