【Nginx】前后分离项目,nginx转发websoket失败

引用

由于现在大多数项目都是前后分离开发的,很多时候都不是直接对后端项目进行请求,而且经过了Nginx代理转发请求。
Nginx常规的代理转发配置是不支持websocket协议的。
本节主要介绍如何让Nginx代理支持websocket协议。

原因:

公网ip经过nginx代理,nginx代理默认不支持长连接,而wobsocket是基于长连接实现的。

由于“Upgrade”是 hop-by-hop 标头,因此它不会从客户端传递到代理服务器。使用正向代理,客户端可以使用该CONNECT 方法来规避此问题。但是,这不适用于反向代理,因为客户端不知道任何代理服务器,并且需要在代理服务器上进行特殊处理。

解决方法:

如上所述,包括“Upgrade”和“Connection”在内的hop-by-hop标头不会从客户端传递到代理服务器,因此为了让代理服务器了解客户端将协议切换到 WebSocket 的意图,这些标头必须明确传递:

http {
	upstream gateway {
        server 127.0.0.1:8080;
        server 127.0.0.1:8081;
    }

	location /chat/ {
    	proxy_pass http://gateway;
    	proxy_http_version 1.1;
    	proxy_set_header Upgrade $http_upgrade;
    	proxy_set_header Connection "upgrade";
	}
}

一个更复杂的示例&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值