worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream im {
# 负载均衡策略必须是 ip_hash
ip_hash;
server 127.0.0.1:9091;
server 127.0.0.1:9092;
server 127.0.0.1:9093;
}
server {
listen 9090;
server_name localhost;
location ^~/socket.io/ {
proxy_http_version 1.1;
proxy_pass http://im;
proxy_set_header Upgrade $http_upgrade;##此处Upgrade注意大小写
proxy_set_header Connection "Upgrade";
proxy_set_header Remote_addr $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 60s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
}
}
}
如果要使用多节点做水平扩展的话,需要保证一个客户端只跟具体的某台SocketIO服务器维持连接,否则的话,在WebSocket协议握手阶段,会因为握手失败而无法正常建立连接。
在upstream块里面,多了一个ip_hash的配置,这个配置可以使得nginx根据客户端的ip来做负载均衡,最终的效果是某一个ip的客户端只会被路由到某一台服务器上面。