项目场景:
项目中使用socketIo推送结果到前端页面,开发环境调试完后,部署到测试和生产环境遇到问题问题描述:
-
测试和生产环境用了nginx做反向代理和负载均衡
-
测试和生产环境socketio服务端绑定的是域名
-
当第三方系统调用结果回调前端时,不知道前端socket-client连的时哪台socket-server
解决方案:
- nginx做http请求的负载均衡的时候是采用轮询的方式,但是websocket需要保持长连接,所以Nginx必须配置支持长连接
upstream socket{
//websocket的负载均衡必须使用Iphash的策略来保证,客户端是连的同一个服务端
ip_hash;
server xxx.xxx.xxx:9092;
server xxx.xxx.xxx:9093;
}
server {
listen 8080;
server_name www.baidu.com;
location /socket.io {
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X_Forward_For $proxy_add_x_forwarded_for;
//显示