记录NgInx协议升级

记录NgInx协议升级

客户端websocket的连接一直在报错重新连接始终找不到问题,经过一顿百度最后得出是需要配置NgInx的协议升级转换。
先看客户端的ws的请求和http的请求

http请求头
在这里插入图片描述

ws的请求头
在这里插入图片描述
这两个请求里面有一个非常重要的key:Upgrade
http的Connection:keep-alive
ws的Connection:Upgrade
ws请求头中是包含Upgrade请求头的而http没有

首先,让我们来理解一下什么是HTTP Upgrade机制。它是一种允许客户端和服务器之间通过已建立的HTTP连接来切换到不同协议(如WebSocket)的机制。当客户端希望切换到新协议时,它会发送一个特殊的请求头"Upgrade"给服务器,并在请求头"Connection"中包含“upgrade”值。

我个人理解就是当Connection请求头里包含Upgrade的时候意味着这个请求则从http转换到其他的协议了,具体可以通过Upgrade请求头查看。

NgInx作为代理是通过map $http_upgrade $connection_upgrade进行处理的

	map $http_upgrade $connection_upgrade {
		default upgrade;
		'' close;
	}
	
	server {
   	 location / {
    	    proxy_set_header Upgrade $http_upgrade;
    	    proxy_set_header Connection $connection_upgrade;
   	 	}
	}

首先map http_upgrade connection_upgrade 是定义了一个映射关系即http请求头中如果upgrade存在,则将变量$connection_upgrade的值“upgrade”,否则被设置为“close”。

然后在location块内部使用proxy_set_header指令将$connection_upgrade变量的值设置给Connection请求头,再将通过proxy_set_header将头upgrade的值设置源 $http_upgrade的值。为这样就可以将客户端的协议升级请求正确地转发给后端服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值