You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用SSL的Nginx无法连接K8s集群内80端口Node.js WebSocket服务

故障排查思路

1. SSL基础配置校验

  • 确认SSL证书有效性:执行openssl s_client -connect 你的服务域名:443查看证书是否过期、域名是否匹配、证书链是否完整,若使用自签证书,客户端必须信任对应证书否则会直接拒绝连接
  • 排查Nginx错误日志:打开你配置的debug级错误日志/var/log/nginx/error.log,搜索SSL握手相关报错、请求转发到后端的报错信息,优先定位故障出在SSL握手阶段还是转发到WebSocket服务阶段
  • 确认端口放行规则:检查服务器防火墙、云服务商安全组是否开放了443端口的公网访问权限

2. Nginx代理配置修正

你当前的Nginx配置缺少WebSocket代理必须的参数,按以下规则调整:

  • 补全请求头配置:在/ws的location块中添加以下内容,解决后端服务Host校验、来源校验失败的问题
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;
  • 优化Connection头匹配逻辑:不要写死Connection为upgrade,适配不同请求场景,替换原有proxy_set_header Connection upgrade;为proxy_set_header Connection $connection_upgrade;,同时在Nginx全局http块中添加如下变量定义:
map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}
  • 调整长连接超时配置:WebSocket为长连接,默认Nginx代理60s无流量会主动断开,在location块中添加如下配置延长超时时间:
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;

3. K8s服务校验

  • 确认你配置的server-ip:80是可以从Nginx所在节点正常访问的K8s Service ClusterIP/NodePort,不要直接填Pod IP(Pod重建后IP会变动)
  • 登录Nginx所在服务器执行curl -v http://server-ip:80/ws,确认K8s网络策略、节点防火墙没有拦截Nginx到后端服务的请求

4. 客户端连接校验

  • 确认客户端连接地址为wss://你的服务域名/ws,不要误写为ws协议、漏写/ws路径或者填错域名
  • 如果是浏览器端访问,打开F12控制台的网络标签页,查看WebSocket请求的具体报错:
    • 证书类报错:优先处理SSL证书信任问题
    • 502错误:Nginx无法转发到后端,优先排查Nginx到K8s服务的连通性
    • 400错误:后端服务拒绝请求,优先检查请求头是否完整

内容的提问来源于stack exchange,提问作者sonia kaushal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:18:03