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

Nginx配置WSS反向代理遇404错误及SSL_read()失败问题求助

Nginx配置WSS反向代理遇404错误及SSL_read()失败问题求助

我之前折腾WSS反向代理的时候也踩过类似的坑,结合你的配置和问题描述,帮你梳理下核心问题和解决办法:

一、核心问题:404错误的根源

你用location /statistics时出现404,换成location /就正常,问题出在Nginx的proxy_pass路径规则上:

  • Apache的ProxyPass在匹配/statistics时,会自动把请求中的/statistics路径去掉,转发到后端的根路径/;
  • 但你当前Nginx的proxy_pass https://127.0.0.1:23456;没有加末尾的斜杠,会把完整的请求路径(比如/statistics)直接传给后端,而你测试后端wss://kaveneger.ir:23456是正常的,说明后端只监听根路径/,根本没有/statistics这个路由,所以返回404。

二、针对性解决步骤

1. 修正proxy_pass路径,添加末尾斜杠

把location /statistics里的proxy_pass改成带斜杠的形式,让Nginx自动替换掉匹配的/statistics路径:

location /statistics {
    # 关键:末尾加斜杠,将/statistics映射到后端的/
    proxy_pass https://127.0.0.1:23456/;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    # 调整proxy_ssl_name为后端的IP/域名,确保SSL SNI匹配
    proxy_ssl_name 127.0.0.1;
    proxy_ssl_session_reuse off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    # 去掉不必要的客户端证书配置,除非后端明确要求验证客户端证书
    # proxy_ssl_certificate "/etc/letsencrypt/live/domain/fullchain.pem";
    # proxy_ssl_certificate_key "/etc/letsencrypt/live/domain/privkey.pem";
}

2. 调整SSL相关配置

  • proxy_ssl_name:要设置为后端服务器的IP或域名(比如这里的127.0.0.1),而不是前端的$host,否则后端SSL证书的SNI校验会失败;
  • 去掉proxy_ssl_certificate和proxy_ssl_certificate_key:这两个是Nginx作为客户端向后端发起SSL请求时提供的证书,如果你后端没有要求客户端证书验证,这两行反而会导致握手异常。

3. 验证配置并重启Nginx

先检查配置语法是否正确:

nginx -t

如果提示test is successful,就重启Nginx:

nginx -s reload

三、关于SSL_read() failed错误的说明

日志里的这个错误大概率是404错误导致的连锁反应:当Nginx返回404后,客户端提前关闭了连接,导致SSL握手还没完成就中断,从而触发这个错误。解决404问题后,这个SSL错误应该会自动消失。

四、测试验证

重新用wscat测试:

wscat -c wss://domain.com:444/statistics

正常情况下应该能成功连接了。

备注:内容来源于stack exchange,提问作者Steve Moretz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 12:57:39