## 使用nginx实现websocket的负载均衡
当web应用访问量过大时,我们就需要做负载均衡,将同一个域名的请求分散到不同的服务器上。nginx就可以做到。它可以按照轮询、ip哈希、URL哈希、权重等多种方式对后端服务器做负载均衡。但是分配到不同的机器上后,如果请求是有状态的,比如有些页面需要用户登录之后才能访问,我们就需要保证单个用户请求落在一台机器上或者实现多台机器之间的session共享,那样才能保持登录状态。而对于websocket这种长连接协议,nginx负载均衡之后能否保持连接状态呢,我们接下来做一些测试。
### nginx 负载均衡配置
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream websocket {
//通过IP哈希配置
ip_hash;
server 127.0.0.1:9901 weight=2;
server 127.0.0.1:9902 weight=3;
}
}
server {
listen 8080;
location /ws {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
nginx负载均衡能够支持websocket这种长连接协议
测试不多写