Nginx实现websocket代理的方式

Nginx实现websocket代理的方式

一个简单的实现,后续再补充。其中80端口是提供正常web访问的端口,9000是提供socket服务的端口。实际部署时出于安全考虑,可以将代理端口与后端服务器提供的端口设置为不同的值。
基于此配置也可以方便地配置负载均衡。

upstream test.com {
    server 192.168.56.108:80;
    server 192.168.56.109:80;
    keepalive 2000;
}

upstream socket.test.com {
    hash $remote_addr consistent;
    server 192.168.56.108:9000;
    server 192.168.56.109:9000;
}
server {
        listen 80;
        server_name   test.com;

        location / {
                proxy_pass http://test.com/;
                proxy_set_header Host $host:$server_port;
        }
}

server {
        listen 9000;
        server_name   test.com:9000;

        location / {
                proxy_pass http://socket.test.com/;
                proxy_set_header Host $host:$server_port;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
        }
}

设置http的负载均衡比较简单,要设置websocket的负载均衡,需要在编译nginx的时候加一个参数:

--with-stream

而且此参数仅支持1.9.0以上的nginx。

参考文章

  1. NGINX as a WebSocket Proxy
  2. NGINX stream module

你可能感兴趣的:(web服务高可用,计算机网络)