|
|
51CTO旗下网站
|
|
移动端

WebSocket与Nginx的小秘密

为了适应大量消息推送的业务场景,需要多个WebSocket服务器来保障性能和高可用性,因此需要使用Nginx对WebSocket服务器进行反向代理负载均衡。

作者:聚IT来源:今日头条|2019-08-30 08:39

为了适应大量消息推送的业务场景,需要多个WebSocket服务器来保障性能和高可用性,因此需要使用Nginx对WebSocket服务器进行反向代理负载均衡。本文将对以下四点做出讨论:

  • 代理服务器获取流量的方式
  • Nginx代理的方式
  • Nginx如何支持WebSocket
  • Nginx配置WebSocket方式

一、代理服务器获取流量的方式

客户端通常都会直接与Web服务器进行通信。那么当使用代理服务器作为客户端和服务器两者间一个“中介”时,代理服务器获取流量的方式有以下四种方式:

  • 修改客户端:将客户端配置为使用代理服务器,那么客户端会直接将HTTP请求有意的发送到代理服务器上。
  • 修改网络:网络基础设备可以通过若干种技术手段,在客户端不知情或没有参与的情况下,拦截网络流量并将其导入代理,这种代理称为拦截代理。
  • 修改DNS命名空间:放在Web服务器之前的代理服务器,替代物,会直接假扮Web服务器的名字和IP地址
  • 修改Web服务器:将Web服务器配置为向客户端发送一条HTTP重定向命令,将客户端的请求重定向到代理服务器上。
WebSocket与Nginx的小秘密

二、Nginx代理的方式

客户端和代理服务器建立连接并发送请求,代理服务器端接收客户端的请求后与具体的服务器建立连接,并把请求分发给服务器进行处理,最后再将服务器的响应结果反馈给客户端。

三、Nginx如何支持WebSocket

WebSocket 和HTTP虽然是不同协议,但是两者“握手”方式兼容。通过HTTP升级机制,使用HTTP的Upgrade和Connection协议头的方式可以将连接从HTTP升级为WebSocket。如下图所示

WebSocket与Nginx的小秘密

Http升级为WebSocket

因为WebSocket协议是一个hop-by-hop协议(此类头部字段只对单次转发有效。会因为转发给缓存/代理服务器而失效),为了让Nginx代理服务器可以将来自客户端的Upgrade请求发送到后端服务器,要求Upgrade和Connection的头信息必须被显式的设置。可以通过下文将要讲解的修改Nginx的配置文件方式解决此问题。

WebSocket与Nginx的小秘密

代理服务器分别与客户端和服务器建立连接,由于WebSocket连接是长时间保持的,所以代理服务器需要允许这些连接处于打开状态,而不是像对待HTTP使用的短连接那样将其关闭。

四、Nginx配置Websocket方式

通过修改nginx.conf配置,如下图所示

WebSocket与Nginx的小秘密

1.map是根据客户端请求中 $http_upgrade 的值来构造改变 $connection_upgrade 的值,即根据变量 $http_upgrade 的值和{} 里规则创建新的变量 $connection_upgrade并赋值。

2.HTTP的Upgrade协议头机制用于将连接从HTTP连接升级到WebSocket连接,Upgrade机制使用了Upgrade协议头和Connection协议头;为了让Nginx可以将来自客户端的Upgrade请求发送到后端服务器,Upgrade和Connection的头信息必须被显式的设置。如上图代码中第三个红圈。

五、总结

通过Http升级机制将Http升级为WebSocket。Nginx代理服务器通过修改配置的方式解决了WebSocket属于hop-by-hop协议的问题、并通过保持分别与客户端和服务端的连接一直处于打开状态从而实现WebSokcet的代理。

【编辑推荐】

  1. “边缘计算 ‘无线’可能”联想发布ThinkSystem边缘服务器
  2. MySQL数据库服务器越来越慢,如何分析并解决?
  3. Linux 常用服务器之FTP、SSH
  4. 联想发布ThinkSystem边缘服务器,以云+边缘计算助力企业智慧化转型
  5. Python 绝技 —— TCP 服务器与客户端
【责任编辑:武晓燕 TEL:(010)68476606】


点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

这就是5G

这就是5G

5G那些事儿
共15章 | armmay

117人订阅学习

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

371人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

758人订阅学习

读 书 +更多

系统分析师考试辅导(2007版)

《系统分析师考试辅导(2007版)》内容涵盖了最新的系统分析师考试大纲信息系统综合知识的所有知识点,分析了近3年信息系统分析与设计案例...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微