前言
在之前写过使用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";
}
}
复制代码
注意
- socketio的
upstream
中多了一个ip_hash;
,如果没有在里面加这个字段,前后端的连接就会变成短连接,连上就断,断了就连接,反反复复;具体的原因还未搞清楚; - 两者的路径配置,其中socketio的请求路径后加了
/
,转发路径末尾未添加/
;websocket的请求路径末尾未添加/
,但是转发路径末尾添加了/
; - 严格注意Nginx的路径配置;