Nginx實戰(zhàn)之反向代理WebSocket的配置實例
實現(xiàn)方案
采用目前比較成熟的WebSocket技術(shù),WebSocket協(xié)議為創(chuàng)建客戶端和服務(wù)器端需要實時雙向通訊的webapp提供了一個選擇。其為HTML5的一部分,WebSocket相較于原來開發(fā)這類app的方法來說,其能使開發(fā)更加地簡單。大部分現(xiàn)在的瀏覽器都支持WebSocket,比如Firefox,IE,Chrome,Safari,Opera,并且越來越多的服務(wù)器框架現(xiàn)在也同樣支持WebSocket。
WebSocket集群
在實際的生產(chǎn)環(huán)境中,要求多個WebSocket服務(wù)器必須具有高性能和高可用,那么WebSocket協(xié)議就需要一個負載均衡層,NGINX從1.3開始支持WebSocket,其可以作為一個反向代理和為WebSocket程序做負載均衡。
Nginx配置
注:看官方文檔說 Nginx 在 1.3 以后的版本才支持 websocket 反向代理,所以要想使用支持 websocket 的功能,必須升級到 1.3 以后的版本
NGINX通過允許一個在客戶端和后端服務(wù)器之間建立的隧道來支持WebSocket。為了NGINX發(fā)送來至于客戶端Upgrade請求到后端服務(wù)器,Upgrade和Connection頭部必須被設(shè)置明確。
代碼實例:
upstream wsbackend { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; server_name ws.52itstyle.com; location / { proxy_pass http://wsbackend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
前端配置:
$(function(){ socket.init(); }); //Nginx反向代理實現(xiàn)websocket var basePath = "ws://ws.52itstyle.com//acts_competition/"; socket = { webSocket : "", init : function() { if ('WebSocket' in window) { webSocket = new WebSocket(basePath+'webSocketServer'); } else if ('MozWebSocket' in window) { webSocket = new MozWebSocket(basePath+"webSocketServer"); } else { webSocket = new SockJS(basePath+"sockjs/webSocketServer"); } webSocket.onerror = function(event) { //alert("websockt連接發(fā)生錯誤,請刷新頁面重試!") }; webSocket.onopen = function(event) { }; webSocket.onmessage = function(event) { }; }, sendData : function(data) { webSocket.send(data); }, }
最后,重啟下Nginx即可。
反向代理服務(wù)器在支持WebSocket時面臨的挑戰(zhàn)
- WebSocket是端對端的,所以當一個代理服務(wù)器從客戶端攔截一個Upgrade請求,它需要去發(fā)送它自己的Upgrade請求到后端服務(wù)器,也包括合適的頭。
- 因為WebSocket是一個長連接,不像HTTP那樣是典型的短連接,所以反向代理服務(wù)器需要允許連接保持著打開,而不是在它們看起來空閑時就將它們關(guān)閉。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
通過Nginx解決網(wǎng)絡(luò)隔離實踐記錄詳解
這篇文章主要介紹了通過Nginx解決網(wǎng)絡(luò)隔離實踐記錄詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05windows下nginx服務(wù)關(guān)不掉問題解決
這篇文章主要給大家介紹了關(guān)于windows下nginx服務(wù)關(guān)不掉問題解決的相關(guān)資料,nginx是一種網(wǎng)絡(luò)服務(wù)器,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-08-08關(guān)于nginx+php5.3.8+eclipse3.7工作空間的配置方法
以前用eclipse3.6時設(shè)置php服務(wù)器時完全可以在base url欄填寫自己工作空間的目錄,然后修改nginx.conf加一個alias就行了2011-11-11Nginx服務(wù)器的反向代理proxy_pass配置方法講解
這篇文章主要介紹了Nginx服務(wù)器的反向代理proxy_pass配置方法講解,包括經(jīng)常被提到的url的/問題的相關(guān)說明,需要的朋友可以參考下2016-01-01