最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nginx的WebSocket反向代理實踐過程

 更新時間:2025年05月20日 10:11:23   作者:Hello.Reader  
這篇文章主要介紹了Nginx的WebSocket反向代理實踐過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、HTTP 協(xié)議升級機制回顧

  • Upgrade/Connection 報頭

客戶端發(fā)起 WebSocket 握手時,會在普通 HTTP 請求中加入

Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: <隨機值>
Sec-WebSocket-Version: 13

服務端若接受協(xié)議切換,會以 101 Switching Protocols 響應,并同樣返回 UpgradeConnection 報頭。

  • Hop-by-Hop 報頭限制

HTTP/1.1 中,UpgradeConnection 都屬于 Hop-by-Hop 報頭,只能在相鄰節(jié)點間生效,不會被普通反向代理轉發(fā)。因此,需要在 Nginx 明確地把這兩者從客戶端請求里取出,并再設置到轉發(fā)給后端的請求頭中。

二、Nginx 代理 WebSocket 的關鍵配置

1. 基本示例

location /chat/ {
    # 將請求轉發(fā)到后端 WebSocket 服務
    proxy_pass http://backend;

    # 使用 HTTP/1.1 協(xié)議,以支持 Upgrade
    proxy_http_version 1.1;

    # 將客戶端請求中的 Upgrade 與 Connection 頭轉發(fā)給后端
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}
proxy_http_version 1.1

強制使用 HTTP/1.1,否則默認的 HTTP/1.0 無法支持協(xié)議升級。

proxy_set_header Upgrade $http_upgrade

將客戶端傳來的 Upgrade: websocket 透傳給后端。

proxy_set_header Connection “upgrade”

明確指定與 Upgrade 配合使用。

2. 智能化 Connection 設置

在某些場景下,希望僅在真有升級需求時才發(fā) "upgrade",否則保持連接關閉。

可借助 Nginx 的 map 模塊:

# 將是否存在 Upgrade 頭映射成變量
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;
    }
}
  • 如果客戶端請求里沒有 Upgrade,則向后端發(fā)送 Connection: close,更符合一般 HTTP 請求的語義。

三、超時與心跳優(yōu)化

默認情況下,Nginx 在代理 WebSocket 連接時,如果后端在 60 秒內(nèi)沒有任何數(shù)據(jù)回傳,會主動關閉連接。

這對于長時間空閑但后續(xù)可能仍要推送消息的場景并不友好。

常用的優(yōu)化方案有兩種:

1.延長 Nginx 的 proxy_read_timeout

locationhttp、server 級別添加:

proxy_read_timeout 3600s;   # 將超時時間提升到 1 小時

2.后端發(fā)送 WebSocket Ping

讓后端應用周期性地向客戶端(經(jīng)過 Nginx)發(fā)送 Ping 幀,觸發(fā) Nginx 讀取數(shù)據(jù),從而重置超時計時器,同時還能檢測連接健康狀態(tài)。

四、完整示例

http {
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }

    upstream backend {
        server 127.0.0.1:8080;    # 后端 WebSocket 服務地址
        # 可根據(jù)實際情況添加多臺服務器,實現(xiàn)負載均衡
    }

    server {
        listen 80;
        server_name example.com;

        # 靜態(tài)資源處理(可選)
        location /static/ {
            root /var/www/html;
        }

        # WebSocket 代理入口
        location /chat/ {
            proxy_pass http://backend;
            proxy_http_version 1.1;
            proxy_set_header   Upgrade $http_upgrade;
            proxy_set_header   Connection $connection_upgrade;

            # 轉發(fā)客戶端真實 IP(可選)
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

            # 超時配置
            proxy_read_timeout  3600s;
            proxy_send_timeout  3600s;
        }
    }
}

五、實踐要點與注意事項

  • HTTPS + WSS

若在前端使用 wss://(即 TLS 加密的 WebSocket),必須在 Nginx 上配置對應的 SSL 證書,并在 server 塊中使用 ssl_certificate、ssl_certificate_key 等指令。

  • 負載均衡與 Sticky Session

對于需要在多實例間保持會話一致性的業(yè)務,可考慮基于 Cookie 或 IP 哈希的 Sticky Session 配置,或者將業(yè)務設計成無狀態(tài)。

  • 安全加固

可以在 Nginx 中加入 limit_conn、limit_req 等限流指令,防止惡意連接耗盡資源;也可結合 lua-nginx-module 實現(xiàn)更復雜的鑒權或動態(tài)路由。

總結

通過上述方式,Nginx 能夠高效、穩(wěn)定地將客戶端的 HTTP 升級請求(Upgrade)轉發(fā)到后端 WebSocket 服務,實現(xiàn)反向代理與負載均衡。

在此基礎上,再配合合理的超時調整、心跳檢測與安全限流,即可構建面向生產(chǎn)環(huán)境的高可用、可擴展的實時通信平臺。

希望本文能幫助你快速上手 Nginx WebSocket 代理,并打造符合業(yè)務需求的實時架構。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • nginx+ingress 413問題排查過程

    nginx+ingress 413問題排查過程

    處理413錯誤需調整Nginx的client_max_body_size及Ingress配置,合理設置body-size,若無效,檢查后端限制,注意過大可能影響安全
    2025-08-08
  • Nginx access 日志通過 Filebeat 8.15.5 寫入 Elasticsearch 8 實戰(zhàn)流程

    Nginx access 日志通過 Filebeat 8.15.5 寫

    本文基于 Filebeat 8.15.5 版本,詳細實現(xiàn)了Nginx access日志到ES 8的采集流程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-12-12
  • Nginx跨域問題解析與解決

    Nginx跨域問題解析與解決

    本地運行一個項目,要訪問外域的api接口,存在跨域問題,下面這篇文章主要給大家介紹了關于如何使用Nginx解決跨域問題的相關資料,文中介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • 利用Nginx實現(xiàn)資源代理和接口代理的實現(xiàn)方法

    利用Nginx實現(xiàn)資源代理和接口代理的實現(xiàn)方法

    在 Web 開發(fā)與部署中,我們常常需要借助 Nginx 實現(xiàn)接口代理和靜態(tài)資源代理,以解決跨域、統(tǒng)一入口、權限控制或性能優(yōu)化等問題,本指南將全面介紹 Nginx 資源代理與接口代理的實現(xiàn)方法,需要的朋友可以參考下
    2025-04-04
  • iframe跨域地址代理方式(nginx配置)

    iframe跨域地址代理方式(nginx配置)

    本文介紹了使用nginx進行iframe跨域地址代理的方法,配置了proxy_set_header解決靜態(tài)資源加載問題,并提供了啟動、查看和停止nginx的命令
    2026-05-05
  • 排查Openresty獲取不到Host請求頭解決過程詳解

    排查Openresty獲取不到Host請求頭解決過程詳解

    這篇文章主要為大家介紹了排查Openresty獲取不到Host請求頭解決過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • nginx搭建IPv6 ->IPv4反向代理服務器的實現(xiàn)

    nginx搭建IPv6 ->IPv4反向代理服務器的實現(xiàn)

    本文主要介紹了nginx搭建IPv6 ->IPv4反向代理服務器的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-05-05
  • nginx 負載均衡的三種參數(shù)設置

    nginx 負載均衡的三種參數(shù)設置

    這篇文章主要介紹了nginx 負載均衡的三種參數(shù)設置,需要的朋友可以參考下
    2017-07-07
  • Nginx?代理解決跨域問題多種情況分析

    Nginx?代理解決跨域問題多種情況分析

    這篇文章主要介紹了Nginx?代理解決跨域問題分析,通過用網(wǎng)站8080訪問Nginx代理后的接口地址,報錯分為多種情況,每種情況給大家詳細分析,感興趣的朋友一起看看吧
    2022-01-01
  • 在linux中部署Nginx項目的步驟詳解

    在linux中部署Nginx項目的步驟詳解

    本文詳細講解了在Linux系統(tǒng)部署Nginx的全過程,包括環(huán)境準備、安裝方式(包管理/源碼編譯)、配置文件結構、反向代理、SSL設置、性能優(yōu)化、安全策略及與PHP、Node.js等服務的集成,覆蓋從基礎搭建到高級配置的關鍵步驟,感興趣的朋友一起看看吧
    2025-06-06

最新評論

遵化市| 姜堰市| 景谷| 读书| 黔东| 大埔县| 美姑县| 宜兰县| 阳春市| 福安市| 云南省| 蓬安县| 青岛市| 阿鲁科尔沁旗| 神农架林区| 海南省| 江孜县| 泰和县| 德昌县| 钟山县| 鄢陵县| 南丹县| 新建县| 巴林左旗| 兰考县| 英超| 师宗县| 安乡县| 乌拉特前旗| 沙洋县| 新乐市| 祁东县| 景宁| 易门县| 安顺市| 莱芜市| 黎城县| 民权县| 徐水县| 简阳市| 三门县|