国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > Nginx > 正文

使用Nginx做WebSockets代理教程

2024-08-30 12:22:21
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了使用Nginx做WebSockets代理教程,本文給出了代理配置,和一個完整的node.js實現的WebSockets實例,需要的朋友可以參考下

WebSocket 協議提供了一種創建支持客戶端和服務端實時雙向通信Web應用程序的方法。作為HTML5規范的一部分,WebSockets簡化了開發Web實時通信程序的難度。目前主流的瀏覽器都支持WebSockets,包括火狐、IE、Chrome、Safari以及Opera等,而且,越來越多的服務器應用框架也開始支持WebSockets。

要在企業產品中使用WebSockets,為滿足高性能和高可用性,需要多個WebSocket服務器。負載均衡層需要支持WebSocket協議。Nginx從1.3版起就開始支持WebSocket協議,而且可以擔當WebSocket應用程序的反向代理以及實現負載均衡。

WebSocket協議和HTTP協議不同,但是WebSocket協議的握手和HTTP是兼容的,它使用HTTP的Upgrade協議頭將連接從HTTP連接升級到WebSocket連接。這個特性使得WebSocket應用程序可以很容易地應用到現有的基礎設施。例如,WebSocket應用可以使用標準的80和443 HTTP端口,因此可以通過現有的防火墻設施。

WebSockets應用程序會在客戶端和服務器之間建立一個長連接,使得開發實時應用很容易。HTTP的Upgrade協議頭機制用于將連接從HTTP連接升級到WebSocket連接,Upgrade機制使用了Upgrade協議頭和Connection協議頭。反向代理服務器在支持WebSocket協議方面面臨著一些挑戰。挑戰之一是WebSocket是一個逐段轉發(hop-by-hop)協議,因此當代理服務器攔截到來自客戶端的Upgrade請求時,代理服務器需要將自己的Upgrade請求發送給后端服務器,包括適合的請求頭。而且,由于WebSocket連接是長連接,與傳統的HTTP端連接截然不同,故反向代理服務器還需要允許這些連接處于打開(Open)狀態,而不能因為其空閑就關閉了連接。

Nginx通過在客戶端和后端服務器之間建立隧道來支持WebSockets通信。為了讓Nginx可以將來自客戶端的Upgrade請求發送到后端服務器,Upgrade和Connection的頭信息必須被顯式的設置。如下所示:
復制代碼 代碼如下:
location /wsapp/ {
    proxy_pass http://wsbackend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

一旦我們完成以上設置,Nginx就可以處理WebSocket連接了。

Nginx WebSockets 實例

下面的例子講述了Nginx是如何為WebSocket做代理的。此例將使用ws模塊,它是基于node.js構建的WebSocket實現。Nginx將擔當反向代理服務器,后端服務器是一個使用了ws和Node.js的簡單WebSockets應用。例子使用的命令在Ubuntu 13.10和CentOS 6.5上測試通過,但對于其他操作系統或許需要稍作修改。就這個例子來說,WebSocket服務器的IP地址是192.168.100.10,Nginx服務器的IP地址是192.168.100.20。如果你還沒有安裝node.js和npm,你可以通過以下命令安裝:

對 Debian/Ubuntu 來說:
復制代碼 代碼如下:
sudo apt-get install nodejs npm

對 RHEL/CentOS 來說:
復制代碼 代碼如下:
sudo yum install nodejs npm

在Ubuntu上,node.js會被安裝為"nodejs",但在CentOS中被會安裝為"node"。我們在例子中統一使用"node",所以,我們會在Ubuntu上創建一個符號連接來允許我們使用“node”:
復制代碼 代碼如下:
ln -s /usr/bin/nodejs /usr/local/bin/node

然后安裝 ws:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 繁昌县| 江陵县| 鸡泽县| 伊金霍洛旗| 潼南县| 镇巴县| 华容县| 青冈县| 谢通门县| 宝坻区| 崇阳县| 怀化市| 张家界市| 海淀区| 高淳县| 连南| 宁晋县| 额尔古纳市| 宝应县| 黄冈市| 江源县| 合作市| 淄博市| 米泉市| 陇川县| 桓仁| 阜城县| 新泰市| 汉沽区| 额济纳旗| 利川市| 桓仁| 乌苏市| 体育| 富锦市| 苏尼特左旗| 广平县| 郯城县| 彭水| 禄劝| 贺州市|