一、WSS(WebSocket Secure)
WSS是WebSocket的加密版本,使用TLS(传输层安全协议)来加密客户端和服务器之间的通信。这增加了数据传输的安全性,防止了数据在传输过程中被窃听或篡改。
二、WSS的工作流程
- TLS握手:客户端通过HTTPS协议(端口443)请求与服务器建立连接。这一步类似于普通的HTTPS握手,但使用的是WebSocket的升级请求。
- WebSocket升级:一旦TLS握手完成,客户端发送一个WebSocket升级请求,其中包括Upgrade: websocket头和其他WebSocket特定的头信息。
- 服务器响应:服务器如果同意升级,将返回一个状态码101响应,表明协议已从HTTP升级到WebSocket。
- 数据传输:连接升级成功后,双方通过WebSocket协议进行全双工通信。
三、准备 SSL 证书
证书要求
- 有效域名(备案)
- 证书类型:PEM 格式(fullchain.pem + privkey.pem)
- 签发机构: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 # 重启
六、错误排除总结
- 检查证书是否过期,nginx配置证书路径是否正确。
- nginx反向代理 WebSocket 升级头是否添加正确。
- 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
- 检查WebSocket服务端口是否开放,服务是否正常运行。