nginx反向代理websocket wss或ws端口

1.直接上nginx配置文件

注意:

后端端口使用wss:proxy_pass https://wss_8;
后端端口使用ws :proxy_pass http://wss_8;
upstream wss_8{
    server 127.0.0.1:8004;
}
 
###

server {
    listen       8104 ssl;
    server_name  bbxx.ios.xxx.com;

    #ssl on;
    ssl_certificate ssl/xxx.com.crt;
    ssl_certificate_key  ssl/xxx.com.key;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

    access_log  /var/log/nginx/wss_8_forward_port_8104.access.log;
    error_log  /var/log/nginx/wss_8_forward_port_8104.error.log;

    location / {
        add_header Access-Control-Allow-Origin *;
        proxy_redirect off;
        proxy_pass https://wss_8;
        proxy_set_header Host $host;
        proxy_set_header X-Real_IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;  
        proxy_set_header Connection "Upgrade";  
    }
    error_page   500 502 503 504  /50x.html;
}

 

更简洁写法

upstream wss_8 {
    server 127.0.0.1:8004;
}

upstream wss_9 {
    server 127.0.0.1:8005;
}

server {
    listen       8104 ssl;
    server_name  bbxx.ios.xxx.com;

    ssl_certificate ssl/xxx.com.crt;
    ssl_certificate_key  ssl/xxx.com.key;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers   HIGH:!aNULL:!MD5;

    access_log  /var/log/nginx/wss.access.log;
    error_log  /var/log/nginx/wss.error.log;

    location / {
        add_header Access-Control-Allow-Origin *;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real_IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";

        # 直接在proxy_pass中拼接路径来选择不同的上游服务器
        proxy_pass https://wss_$arg_id;
    }

    error_page   500 502 503 504  /50x.html;
}


在这个配置中,我们使用了 $arg_id 变量,它代表 URL 中的查询参数 id 的值。例如,如果客户端请求 wss://bbxx.ios.xxx.com:8104/?id=8,那么 $arg_id 的值将会是 8,Nginx 将会将请求代理到 wss_8 上游服务器。

请注意以下几点:

客户端需要在 URL 中包含 id 查询参数,例如 wss://bbxx.ios.xxx.com:8104/?id=8。
由于我们使用了 https://,这意味着 Nginx 将处理 SSL/TLS 握手。如果您的上游服务器不需要 SSL,您可以将 https:// 改为 http://
确保您的 Nginx 版本支持在 proxy_pass 中使用变量。
这种方法是最简洁的,因为它只需要一个 location 块和一个 proxy_pass 指令,并且直接在 proxy_pass 中使用变量来选择不同的上游服务器。

 

 

2.在线websocket接口测试工具:https://www.qvdv.com/tools/qvdv-websocket.html

 

posted @ 2021-02-09 10:41  chenjianwen  阅读(7691)  评论(0)    收藏  举报