Nginx配置WSS反向代理本质是Nginx处理TLS加解密,后端仍用明文ws通信;需域名解析、SSL证书(.crt/.key)、监听443端口并透传Upgrade/Connection头,proxy_buffering off且超时设大值。

Linux 下用 Nginx 配置 WSS 反向代理,本质是让 Nginx 承担 TLS 加密/解密工作,后端仍用普通 ws(明文)通信。这样既不用改业务代码,又能对外提供 wss:// 安全连接,还顺便支持负载均衡和隐藏真实端口。
准备 SSL 证书和域名
WSS 必须基于 HTTPS 域名运行,不能用 IP 直连或自签名证书(浏览器会拒绝)。你需要:
- 一个已备案并解析到服务器的域名(如 wss.example.com)
- 配套的 SSL 证书文件(.crt)和私钥(.key),建议放
/etc/nginx/ssl/下,路径写绝对路径 - 确认证书可用:用
openssl x509 -in /path/to/cert.crt -text -noout检查有效期和域名匹配
核心 server 块配置(监听 443 端口)
在 /etc/nginx/conf.d/ 下新建配置文件(如 wss-proxy.conf),写入以下内容:
注意:不要直接复制粘贴,需按实际修改 server_name、证书路径、后端地址和端口
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
server {
listen 443 ssl;
server_name wss.example.com;
<pre class='brush:php;toolbar:false;'>ssl_certificate /etc/nginx/ssl/wss.example.com.crt;
ssl_certificate_key /etc/nginx/ssl/wss.example.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
location / {
proxy_pass http://127.0.0.1:9501; # 后端 ws 服务地址
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header 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_buffering off;
proxy_read_timeout 86400;
proxy_send_timeout 86400;
}}
关键点说明:
-
listen 443 ssl替代旧写法ssl on,更现代且推荐 -
Upgrade和Connection头必须原样透传,且Connection必须固定为 "upgrade" 字符串,不能用变量 -
proxy_buffering off防止 WebSocket 帧被缓存导致延迟或粘包 -
proxy_read_timeout设为大值(如 86400 秒),避免空闲连接被 Nginx 主动断开
验证与重启
配置完成后执行三步检查:
-
sudo nginx -t:确认语法无误,输出 “syntax is ok” 和 “test is successful” -
sudo nginx -s reload或sudo systemctl reload nginx:平滑重载配置 - 浏览器访问
wss://wss.example.com(注意是 wss,不是 https),用 JavaScript 测试连接:new WebSocket("wss://wss.example.com"),控制台无报错即成功
常见问题快速定位
如果连接失败,优先查这几项:
- 域名 DNS 是否生效?用
ping wss.example.com和curl -I https://wss.example.com验证基础 HTTPS 可达 - 防火墙是否放行 443 端口?
sudo ufw status或sudo iptables -L - Nginx 错误日志:
sudo tail -f /var/log/nginx/error.log,重点关注 handshake、timeout、SSL 相关错误 - 后端服务是否在
127.0.0.1:9501正常监听?netstat -tuln | grep :9501

















