WebSocket与Nginx的小秘密

2019-07-23    来源:天下数据IDC资讯

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

代理服务器获取流量的方式 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的代理。

【凡本网注明来源非中国IDC圈的作品,均转载自其它媒体,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。】

延伸阅读:

  • 台达电动车及插电式混合动力车技术实力获菲亚特克莱斯勒汽车肯定
  • Hadoop与 Spark - 选择正确的大数据框架
  • Hadoop现在怎么样了?

标签: WebSocket Nginx WebSocket与Ngi

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:“北上深”数据中心2019产业政策浅析,数据中心

下一篇:英特尔和SAP深化数据中心技术合作