精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Nginx代理websocket為什么要這樣做?
userphoto

2022.05.10 河北省

關注

Nginx反向代理websocket

示例:

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;

        }

    }

也許你也曾遇到為什么配置ws/wss協議相關的代理時總是不順利?最后一番搜索發現需要加上面三行,于是二話不講,ctrl+c/ctrl+v 一套帶走,reload一下, 完成了。

那么這三行到底有什么特殊本領呢?簡單看看:

proxy_http_version 1.1;

這一行沒啥說的,設置http協議版本1.1, 這個主要是為了下面的兩行做準備。

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

這兩行就是設置兩個請求頭 UpgradeConnection,這兩個請求頭都是逐跳標頭(只能傳輸一次,不能透傳), 后端ws程序根據這兩個頭攜帶的信息來判斷是否使用ws協議來通信。

  • Upgrade
    能且只能在http1.1版本中使用, 用來標識協議升級/轉換, 在我們這篇文章的背景下,這個頭信息一般是: Upgrade: websocket; 表示客戶端希望使用websocket協議通信, 那么后端的ws程序取到頭信息后會返回101狀態碼(協議轉換),此時瀏覽器就會使用當前的TCP連接建立websocket通道。

  • Connection
    在本篇文章的背景下, Connection頭信息取值upgrade, 表示本次請求是一次協議升級(協議轉換)請求, 配合 Upgrade: websocket信息, 完整表達了這個請求要升級到websocket協議。

為什么要顯示指定升級頭?

上面提到了反向代理和逐跳標頭,客戶端發起請求時是和反響代理服務器建立請求, 此時客戶端攜帶的 Upgrade、Connection頭是不會被反向代理服務器直接轉發到后端服務的(這就是逐跳標頭), 后端服務獲取不到這兩個頭信息自然也不會主動去切換協議。

因此,需要在反向代理服務器轉發上游時帶上客戶端原來的請求頭,才可以完成協議的升級或切換。

容易遇到的問題

  1. 需要注意多層反向代理的場景,都要顯示指定頭信息才行,否則不得行。

  2. wss只要在最外層的代理服務器上配置即可, 內層的代理服務器使用ws協議交互。

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
WebSocket 結合 Nginx 實現域名及 WSS 協議訪問
Nginx支持WebSocket反向代理
springboot + websocket + linux服務器(nginx)404問題解決
網站添加https后websocket不能使用
WebSocket:WebSocket能干些啥?
理清 WebSocket 和 HTTP 的關系
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 陆川县| 湖南省| 沂南县| 哈密市| 泗阳县| 织金县| 西乌| 谷城县| 芒康县| 沧州市| 土默特右旗| 东乡族自治县| 通山县| 保靖县| 仁寿县| 泾阳县| 甘谷县| 陵川县| 屏东市| 无极县| 富川| 军事| 科技| 仪陇县| 盐源县| 来宾市| 灵川县| 梓潼县| 广州市| 勃利县| 额尔古纳市| 明星| 贺州市| 通化县| 福海县| 渭南市| 武城县| 洪洞县| 江城| 沾化县| 贡山|