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

Nginx反向代理Mercure Hub(Caddy)出现TLS握手无对应证书错误如何解决

问题根本原因是TLS握手阶段的SNI不匹配导致的。你配置的Caddy证书仅对mercure-hub-domain.com生效,当Nginx发起代理请求时,默认会把proxy_pass中填写的地址(127.0.0.1或者你的域名解析后的IP)作为SNI发送给Caddy,Caddy找不到对应IP的证书就抛出报错。你在Nginx中设置的Host头是HTTP层面的参数,不会影响TLS握手阶段的SNI传递,所以之前的配置不生效。

以下是两种可行解决方案,优先推荐第一种:

方案1(推荐):本地回环流量走HTTP,避免TLS校验

本机内部的代理流量不需要加密,直接走Caddy的HTTP端口即可,完全规避证书匹配问题:

  1. 修改Nginx配置的location /块,把proxy_pass https://127.0.0.1:3000;替换为proxy_pass http://127.0.0.1:3001;,其余配置保持不变
  2. 重载Nginx配置:nginx -s reload
    修改完成后即可正常访问。

方案2:保留HTTPS代理,手动指定SNI

如果你必须走HTTPS代理,需要在Nginx配置中显式指定TLS握手的SNI参数:
在Nginx的location /块中添加以下两行配置:

proxy_ssl_server_name on;
proxy_ssl_name $host;

修改后完整的location块配置如下:

location / {
    proxy_pass https://127.0.0.1:3000;
    proxy_read_timeout 24h;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_connect_timeout 300s;

    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    # 新增以下两行
    proxy_ssl_server_name on;
    proxy_ssl_name $host;
}

修改完成后重载Nginx配置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 16:45:02