Nginx与websocket或socketio的负载均衡

前言

在之前写过使用socketio来实时向用户推送站内信springboot使用netty-socketio推送消息,在前天上线时遇到了一个问题,后端在生产上启动了,消息也能启动,但是前段页面是直接请求的IP加端口号,而这个端口是不对外开放的,只能走Nginx;也就是前端需要通过Nginx来转发到后端;最后还得自己去配置Nginx;

正文

Nginx安装

这个就不需要安装,直接去Nginx官网下载对应系统的压缩包;Nginx官网;我的版本是nginx-1.12.2;下载下来是一个压缩包,只需要解压就行了,不用安装;这里需要知道几个命令就行了;

  • nginx.exe -s quit 退出
  • nginx.exe -s reload 重新加载(重启)这个用得比较多,修改配置就用到这个命令
  • nginx.exe -s stop 停止
  • start nginx.exe 启动

Nginx配置socketio负载均衡

先说自己的情况:前端使用Vue框架,且socketio采用的三方插件; 我的配置:


http {
    upstream websocket {
        server 192.168.1.16:9099 weight=1;
        server 192.168.1.16:9999 weight=1;
        ip_hash;
    }
    server {
        listen       8080;
        server_name 192.168.1.16;
        location /socket.io/ {
            proxy_pass http://websocket;

            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
}

复制代码

由于前端每次请求的路径都会附带socket.io,所以我这里配置的是转发socket.io的路径,而且还要注意的是我在后边是加了/的;

Nginx配置websocket负载均衡

配置:

http {
    upstream websocket {
        server 192.168.1.16:9099 weight=1;
        server 192.168.1.16:9999 weight=1;
    }
    server {
        listen       8080;
        server_name 192.168.1.16;
        
        location /socket {
            proxy_pass http://websocket/;

            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
}


复制代码

注意

  1. socketio的upstream中多了一个ip_hash;,如果没有在里面加这个字段,前后端的连接就会变成短连接,连上就断,断了就连接,反反复复;具体的原因还未搞清楚;
  2. 两者的路径配置,其中socketio的请求路径后加了/,转发路径末尾未添加/;websocket的请求路径末尾未添加/,但是转发路径末尾添加了/
  3. 严格注意Nginx的路径配置;
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值