本机的websocket服务地址为ws://127.0.0.1:8765, 而我们想对外服务的地址为ws://ws.example.com:8080, 这个时候就可以使用nginx进行反向代理进行服务部署。

1 nginx反向代理websocket服务

websocket服务又分为两种,一种是不需要ssl证书的ws,一种是需要ssl证书的,就如同http和https服务一样,下文给出了nginx配置的详细信息。

1.1 反向代理websocket服务(ws)

server {
    listen 8080; # 这里填对外提供服务的端口
    server_name ws.example.com; # 这里填的你域名或者ip 
    add_header Access-Control-Allow-Origin *;
    location / {
        #添加wensocket代理的目标服务器
        proxy_pass http://127.0.0.1:8765;  # 这里填你的websocket本机服务地址
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_connect_timeout 1800s;
        proxy_send_timeout 1800s;
        proxy_read_timeout 1800s;
    }
}

1.2 反向代理websocket ssl服务(wss)

server {
    listen 8080 ssl; # 这里填对外提供服务的端口
    server_name ws.example.com; # 这里填的你域名或者ip 
    ssl_certificate       /etc/nginx/xxx.com.pem; # 这里填ssl证书的pem
    ssl_certificate_key /etc/nginx/xxx.com.key; # 这里填ssl证书的key
    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;
    ssl_verify_client off;
    add_header Access-Control-Allow-Origin *;
    location / {
        #添加wensocket代理
        proxy_pass http://127.0.0.1:8765;  # 这里填你的websocket本机服务地址
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_connect_timeout 1800s;
        proxy_send_timeout 1800s;
        proxy_read_timeout 1800s;
    }
}