nginx 代理 wss/ws websocket 協議


 

WebSocket說明

WebSocket:是一種網絡傳輸協議,可在單個TCP連接上進行全雙工通信,位於OSI模型的應用層。WebSocket使得客戶端和服務器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據。在WebSocket API中,瀏覽器和服務器只需要完成一次握手,兩者之間就可以創建持久性的連接,並進行雙向數據傳輸。

WebSocket協議規范將ws(WebSocket)和wss(WebSocket Secure)定義為兩個新的統一資源標識符(URI)方案,分別對應明文加密連接。

 

更多說明可參考如下來自wiki簡介

WebSocket是一種與HTTP不同的協議。兩者都位於OSI模型的應用層,並且都依賴於傳輸層的TCP協議。 
雖然它們不同,但是RFC 6455中規定:it is designed to work over HTTP ports 80 and 443 as well as to support HTTP proxies and intermediaries
(WebSocket通過HTTP端口80和443進行工作,並支持HTTP代理和中介),從而使其與HTTP協議兼容。 
為了實現兼容性,WebSocket握手使用HTTP Upgrade頭,從HTTP協議更改為WebSocket協議。

WebSocket協議支持Web瀏覽器(或其他客戶端應用程序)與Web服務器之間的交互,具有較低的開銷,便於實現客戶端與服務器的實時數據傳輸。 
服務器可以通過標准化的方式來實現,而無需客戶端首先請求內容,並允許消息在保持連接打開的同時來回傳遞。
通過這種方式,可以在客戶端和服務器之間進行雙向持續對話。 
通信通過TCP端口80或443完成,這在防火牆阻止非Web網絡連接的環境下是有益的。
另外,Comet之類的技術以非標准化的方式實現了類似的雙向通信。

大多數瀏覽器都支持該協議,包括Google Chrome、Firefox、Safari、Microsoft Edge、Internet Explorer和Opera。

與HTTP不同,WebSocket提供全雙工通信。
此外,WebSocket還可以在TCP之上實現消息流。TCP單獨處理字節流,沒有固有的消息概念。 
在WebSocket之前,使用Comet可以實現全雙工通信。但是Comet存在TCP握手和HTTP頭的開銷,因此對於小消息來說效率很低。WebSocket協議旨在解決這些問題。

WebSocket協議規范將ws(WebSocket)和wss(WebSocket Secure)定義為兩個新的統一資源標識符(URI)方案,分別對應明文和加密連接。

使用瀏覽器 開發人員工具,比如chrome開發人員可以檢查WebSocket握手以及WebSocket框架。
View Code

 

nginx 代理 wss/ws websocket協議實踐 

相比於http協議的 反向代理

wss/ws websocket協議需要額外添加的配置如下已經加黑加粗

詳細可以參考官方說明:

https://www.nginx.com/blog/websocket-nginx/

http {
 map $http_upgrade $connection_upgrade { default upgrade; '' close; }
 
    upstream websocket {
        server 192.168.100.10:8010;
    }
 
    server {
        listen 8020;
        location / {
            proxy_pass http://websocket;
            proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host;
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM