必须显式设置 proxy_ssl_name,因为 proxy_ssl_server_name on 仅启用 SNI 扩展发送功能,而 proxy_ssl_name 才决定 Client Hello 中 Server Name 字段的实际值;若不设,Nginx 默认使用 proxy_pass 的字面量(如 IP 或域名),导致上游无法匹配正确证书,TLS 握手失败。

不配 proxy_ssl_name,只开 proxy_ssl_server_name on,TLS 握手照样失败——SNI 字段会发,但内容错得离谱。
为什么 proxy_ssl_name 必须显式设置
Nginx 默认把 proxy_pass https://10.0.0.100 这种写法里的 IP 或主机名当 SNI 值发给后端。可现实里,你代理的是一个 IP 托管几十个域名的 SaaS 网关或 CDN 回源目标,上游靠 SNI 区分租户和证书。如果所有请求都发 10.0.0.100 作为 SNI,上游根本没法选证书,轻则返回泛域名不匹配的证书,重则直接断连报 SSL_do_handshake() failed。
-
proxy_ssl_server_name on只是“允许发 SNI”,不是“自动填对值” -
proxy_ssl_name才是真正决定 TLS Client Hello 里 Server Name 字段填什么的关键指令 - 不设
proxy_ssl_name,Nginx 就用proxy_pass的字面量,哪怕你写了https://backend.example.com,它也不会读取客户端Host头
proxy_ssl_name 该用哪个变量
绝大多数场景下,必须用 $host,而不是 $http_host 或硬编码字符串。
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
-
$host是 Nginx 解析后的标准化 Host 值:小写、去端口、去空格,稳定可靠 -
$http_host直接取原始请求头,可能含端口(如shop-a.com:443)或大小写混杂,某些上游 TLS 栈会拒绝解析 - 写死字符串(如
proxy_ssl_name "api.example.com")只适用于单域名固定回源,多租户或 CDN 场景下等于自废武功 - 若 CDN 覆盖了
Host头(常见于 Cloudflare、阿里云全站加速),需让 CDN 透传原始值到X-Forwarded-Host,然后改用proxy_ssl_name $http_x_forwarded_host
配置生效前必须确认的三件事
光写对配置不等于问题解决,容易卡在验证环节。
-
proxy_ssl_server_name on必须出现在location块中,且proxy_pass目标协议必须是https://—— 对http://后端设这个指令完全无效 - 上游服务(比如另一台 Nginx 或负载均衡器)必须真实支持 SNI;老旧 Nginx(
- 验证不能只看 Nginx 配置是否 reload 成功,得抓上游日志:在上游加
error_log /var/log/nginx/error.log debug,搜索client sent server name,确认打出的域名和客户端实际请求一致
CDN 回源时最常踩的坑
CDN 回源是 proxy_ssl_name 出问题的高发区,核心矛盾在于 Host 头失真。
- CDN 默认会把回源请求的
Host改成你在控制台填的“源站域名”,导致$host变成origin.example.com,而非用户访问的shop-a.com - 解决方法不是在 Nginx 里猜,而是让 CDN 主动透传:开启“原始 Host 透传”开关(名称因厂商而异),通常对应 header
X-Forwarded-Host或X-Real-Host - 透传后,Nginx 配置要同步改两处:
proxy_ssl_name $http_x_forwarded_host+proxy_set_header X-Forwarded-Host $host,后者方便下游服务做租户识别 - 别忘了确认 CDN 回源协议确实是 HTTPS —— 如果 CDN 配的是 HTTP 回源,
proxy_ssl_*系列指令压根不会触发
真正难的不是写哪几行配置,而是搞清 SNI 值从客户端请求头出发,经过 CDN 改写、Nginx 变量提取、TLS 握手发送、上游解析这一整条链路里,哪一环被悄悄篡改了。调试时盯着上游 debug 日志里那句 client sent server name,比反复 reload Nginx 有用得多。

















