我自己玩的一个后管项目里用到WebSocket技术,我用它实时更新系统的通知。在本地运行一点问题都没有,但是把项目部署到阿里云却一直不好用,经过一番排查,我发现是浏览器请求WebSocket资源出现了403,然后我去百度搜索该问题的原因,最后我把问题锁定在Nginx反向代理上(我的阿里云在Nginx配置SSL证书,所有的http请求先转发到https,然后再反向代理到本地),我又去Nginx官网查找相关资料,Nginx 从 1.3 版本后就支持 WebSocket 技术,并且可以为 WebSocket 做反向代理和负载均衡,官网(https://www.nginx.com/blog/websocket-nginx/)的配置方法如下:
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream websocket {
server 192.168.100.10:8010;
}
server {
listen 8020;
location / {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
}
我用上述方法配置Nginx还不管用,我又查阅了一些资料,发现还要修改Nginx的配置,需要添加 proxy_set_header Origin ""; 一行配置就可以解决问题,我配置如下:
http {
... ...
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
... ...
server {
... ...
#配置websocket
location /endpointChat {
proxy_pass http://172.24.7.69:82;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Origin "";
}
... ...
}
... ...
}
来源:CSDN
作者:hanxiaozhang5741
链接:https://blog.csdn.net/huantai3334/article/details/103553777