Nginx配置ws及wss代理

3289 2019-04-22 Nginx

ws 和 wss 是 WebSocket 协议的两种不容形式,默认端口分别是80,443,主要区别在于是否使用了 SSL/TSL 加密;之前负责过一个实时对话聊天的项目, 项目中的聊天对话就用到了 WebSocket 协议;因此,记录整理如何使用 nginx 配置 ws 、wss;

一、配置 ws

访问 ws://localhost:8100/ws 自动代理转发到 ws://127.0.0.1:8000
server / {
    listen              8100;
    server_name         localhost;
    root                /var/www/example;  # 网站根目录

    location /ws {
        proxy_pass http://127.0.0.1:8000;
        proxy_http_version 1.1;  # WebSocket 需要使用 HTTP/1.1 协议。
        proxy_set_header Upgrade $http_upgrade;  #
        proxy_set_header Connection "Upgrade";  #
        proxy_set_header X-Real-IP $remote_addr;  # 将客户端的真实 IP 地址传递到目标服务器。
        proxy_read_timeout 3600s;  # 设置与 WebSocket 服务器的最大读超时时间
        proxy_send_timeout 3600s;  # 设置与 WebSocket 服务器的最大写超时时间
    }
}
                

二、配置wss

在ws的基础上增加了SSL/TLS加密确保数据安全,有的平台必须要求使用wss协议,如微信小程序;

访问:wss://www.xxxxx.com/wss自动代理转发到内部的ws://127.0.0.1:8000上;
server / {
    listen              443 ssl;
    server_name         www.xxxxx.com;
    root                /var/www/example;  # 网站根目录

    # SSL证书和私钥
    ssl_certificate         /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key     /etc/nginx/ssl/example.com.key;

    # 其他 SSL 配置(根据需要)
    ssl_session_timeout 5m;  # 设置 SSL 会话的超时时间为 5 分钟。
    ssl_session_cache shared:SSL:50m;
    ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    send_timeout 12s;  # 如果客户端在 12 秒内没有接收到数据,连接将被关闭。
    keepalive_timeout 65;  # 设置保持活动连接的超时时间。

    location /wss {
        proxy_pass http://127.0.0.1:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header X-Real-IP $remote_addr;  # 将客户端的真实 IP 地址传递到目标服务器。
        proxy_read_timeout 3600s;  # 设置与 WebSocket 服务器的最大读超时时间
        proxy_send_timeout 3600s;  # 设置与 WebSocket 服务器的最大写超时时间
     }
}