背景
开发环境使用SSE后端发送消息到前端 测试使用后没什么问题,调用接口可以迅速的接收到消息。部署到生产环境可以创建SSE连接但是监听open和message控制台就开始报标题的错误。根据错误查询原因没有头绪。
问题原因
开发环境和生产环境都使用的是vue2,但是生产环境使用了nginx进行了代理,只是问题的根本所在,因为nginx的配置文件中没有配置SSE连接,所以导致无法将消息发送给前端。
解决问题
首先生产环境是用docker部署的nginx,需要修改docker镜像中nginx的配置文件,修改本地nginx的配置文件是无效的。
nginx.conf添加SSE配置:
可以单独弄一个访问SSE的配置
location /prod-api/sse/ {
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# SSE 连接时的超时时间
proxy_read_timeout 180s;
# 取消缓冲
proxy_buffering off;# 关闭代理缓存
proxy_cache off;#代理的端口和路径
proxy_pass http://localhost:8082/sse/;
}
修改docker中nginx.conf的两种方法:
1.删除原来nginx的容器然后再次映射配置文件、日志等文件重新运行一个容器,我的运行命令:/home/scada/docker文件路径和nginx版本号自行修改
docker run -d \
--net host \
--name nginx \
--restart=always \
-v /home/scada/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/scada/docker/nginx/logs:/var/log/nginx \
-v /home/scada/wcms_home/html:/usr/share/nginx/html \
-v /home/scada/docker/nginx/cert:/etc/nginx/cert \
nginx:1.23.4
2.进去nginx容器中对nginx.conf进行编辑修改
# 进入容器内部
docker exec -it nginx /bin/bash
#首先需要在容器内下载vim
#更新软件包
apt-get update
#下载vim
apt-get install vim
# 直接修改配置
vim /etc/nginx/nginx.conf
配置修改好了之后,将容器停了再启动
docker stop nginx
docker start nginx
如果启动nginx容器中途有问题先查看nginx的日志是不是有报错,可能是配置问题配置错问题,也可能是端口被占用,查看日志寻找对应的原因。
总结
根据以上的步骤下来,再次查看SSE连接浏览器也不会报错了。如果有问题评论区评论或者私聊