WSS 是 WebSocket over TLS/SSL 的安全版本,下面是如何在 Nginx 中配置 WSS 服务的详细步骤:
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /path/to/your/cert.pem;
ssl_certificate_key /path/to/your/private.key;
# SSL 优化配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384...';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location /websocket/ {
proxy_pass http://backend_server;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
# 可选:设置代理超时
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
}
}
SSL/TLS 配置:
WebSocket 特定配置:
proxy_http_version 1.1
: 使用 HTTP/1.1 协议proxy_set_header Upgrade $http_upgrade
: 处理协议升级proxy_set_header Connection "upgrade"
: 保持连接升级超时设置:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl http2;
server_name ws.example.com;
ssl_certificate /etc/letsencrypt/live/ws.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ws.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:...';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# WebSocket 端点
location /ws {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
}
# 其他 HTTP 流量
location / {
root /var/www/html;
index index.html;
}
}
检查配置语法:
nginx -t
重新加载 Nginx:
systemctl reload nginx
测试 WSS 连接:
wscat
工具:
bash
wscat -c wss://yourdomain.com/websocket/
502 Bad Gateway:
连接立即断开:
Upgrade
和 Connection
头是否正确设置SSL 证书问题:
openssl s_client -connect yourdomain.com:443
测试证书跨域问题:
nginx
proxy_set_header Access-Control-Allow-Origin *;
proxy_set_header Access-Control-Allow-Methods *;
proxy_set_header Access-Control-Allow-Headers *;
通过以上配置,你应该能够成功在 Nginx 上部署 WSS 服务。