nginx支持websocket

一 http与websocket

1.http是应用层的协议,默认端口为80;https的端口为443;是一种短链接方式。

2.websocket:

WebSocket协议和HTTP协议不同,但是WebSocket协议的握手和HTTP是兼容的,它使用HTTP的Upgrade协议头将连接从HTTP连接升级到WebSocket连接。这个特性使得WebSocket应用程序可以很容易地应用到现有的基础设施。例如,WebSocket应用可以使用标准的80和443 HTTP端口,因此可以通过现有的防火墙设施。
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

二   http升级支持websocket的原理

WebSockets应用程序会在客户端和服务器之间建立一个长连接,使得开发实时应用很容易。HTTP的Upgrade协议头机制用于将连接从HTTP连接升级到WebSocket连接,Upgrade机制使用了Upgrade协议头和Connection协议头。

三     http支持websocket遇到的瓶颈问题

反向代理服务器在支持WebSocket协议方面面临着一些挑战。

挑战1:WebSocket是一个逐段转发(hop-by-hop)协议,因此当代理服务器拦截到来自客户端的Upgrade请求时,代理服务器需要将自己的Upgrade请求发送给后端服务器,包括适合的请求头。

挑战2:由于WebSocket连接是长连接,与传统的HTTP端连接截然不同,故反向代理服务器还需要允许这些连接处于打开(Open)状态,而不能因为其空闲就关闭了连接。

四  解决办法与操作步骤

4.1 思路

Nginx通过在客户端和后端服务器之间建立隧道来支持WebSockets通信。为了让Nginx可以将来自客户端的Upgrade请求发送到后端服务器,Upgrade和Connection的头信息必须被显式的设置。

4.2 操作配置

在nginx的配置文件中进行修改:

http{
	map $http_upgrade $connection_upgrade {
	    default upgrade;
	      ''      close;
	  }
    
	server {
	    listen       80;
	     location / {
	         proxy_pass http://127.0.0.1:8080;
	             # 支持websocket
	             proxy_http_version 1.1;
	             proxy_set_header Upgrade $http_upgrade;
	             proxy_set_header Connection "upgrade";
	     }
	 }
}

解释说明:

map指令的作用

据客户端请求中$http_upgrade 的值,来构造改变$connection_upgrade的值。即根据变量$http_upgrade的值创建新的变量$connection_upgrade。 创建的规则就是{}里面的东西。规则如下:

其中{}里的规则没有匹配成功,则使用默认的。即 $connection_upgrade 的值会一直是 upgrade。如果 $http_upgrade为空字符串的话,那值就是 close。

server块中的配置:

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

如下图所示:

 

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

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

1.修改客户端:将客户端配置为使用代理服务器,那么客户端会直接将HTTP请求有意的发送到代理服务器上。

2.修改网络:网络基础设备可以通过若干种技术手段,在客户端不知情或没有参与的情况下,拦截网络流量并将其导入代理,这种代理称为拦截代理。

3.修改DNS命名空间:放在Web服务器之前的代理服务器,替代物,会直接假扮Web服务器的名字和IP地址

4.修改Web服务器:将Web服务器配置为向客户端发送一条HTTP重定向命令,将客户端的请求重定向到代理服务器上。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值