Nginx 配置 WebSocket安全连接(WSS)指南

2026-05-08
Nginx

一、WSS(WebSocket Secure)

WSS是WebSocket的加密版本,使用TLS(传输层安全协议)来加密客户端和服务器之间的通信。这增加了数据传输的安全性,防止了数据在传输过程中被窃听或篡改。

二、WSS的工作流程

  1. TLS握手‌:客户端通过HTTPS协议(端口443)请求与服务器建立连接。这一步类似于普通的HTTPS握手,但使用的是WebSocket的升级请求。
  2. ‌ WebSocket升级‌:一旦TLS握手完成,客户端发送一个WebSocket升级请求,其中包括Upgrade: websocket头和其他WebSocket特定的头信息。
  3. 服务器响应‌:服务器如果同意升级,将返回一个状态码101响应,表明协议已从HTTP升级到WebSocket。
  4. ‌数据传输‌:连接升级成功后,双方通过WebSocket协议进行全双工通信。

三、准备 SSL 证书

证书要求

  1. 有效域名(备案)
  2. 证书类型:PEM 格式(fullchain.pem + privkey.pem)
  3. 签发机构:Let’s Encrypt(免费)/ 阿里云 / 腾讯云(免费 / 付费)

四、Nginx 配置

复制代码
server {
    listen 80;
    server_name yourdomain.com;
    return 301 https://$host$request_uri;  # 强制跳转 HTTPS
}

server {
    listen 443 ssl;
    server_name yourdomain.com;

    # SSL 证书(需检查路径是否正确)
    ssl_certificate  /www/server/panel/vhost/cert/qjxq.api.kaiup.site/fullchain.pem
    ssl_certificate_key  /www/server/panel/vhost/cert/yourdomain.com/privkey.pem

    # TLS 安全配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;

    # WSS 代理核心
    location /wss {
        # 你的WebSocket服务
        proxy_pass https://127.0.0.1:8282;
        
        # WebSocket 升级头
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header X-Real-IP $remote_addr;
    }
}

五、保存配置并重启

复制代码
nginx -t  # 测试配置是否正确
nginx -s reload # 重启

六、错误排除总结

  1. 检查证书是否过期,nginx配置证书路径是否正确。
  2. nginx反向代理 WebSocket 升级头是否添加正确。
  3. nginx配置proxy_pass https://127.0.0.1:8282,这里http要加s,不然可能报错:

SSL handshake error: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request

  1. 检查WebSocket服务端口是否开放,服务是否正常运行。