proxy_ssl_name指令用于Nginx作为HTTPS反向代理时显式指定TLS握手中的SNI值,须与proxy_ssl_server_name on配合使用,以确保后端多域名HTTPS服务能正确匹配证书和站点配置。

proxy_ssl_name 指令用于在 Nginx 作为 HTTPS 反向代理时,显式指定 TLS 握手阶段发送给后端服务器的 Server Name Indication(SNI) 值。
解决后端是多域名 HTTPS 服务的场景
当 Nginx 代理的目标服务器(如另一台 Nginx、Tomcat 或云服务网关)在同一 IP 上托管多个 HTTPS 站点,并依赖 SNI 区分虚拟主机时,若不设置 proxy_ssl_name,Nginx 默认会把 proxy_pass 中的域名(或 IP)作为 SNI 发送——这可能导致后端无法匹配到正确的证书或站点配置,返回默认证书、403 或连接失败。
例如:后端是 https://api.example.com 和 https://admin.example.com 共享一个 IP,Nginx 配置中写的是 proxy_pass https://192.168.1.100;,此时必须加:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
proxy_ssl_name "api.example.com";
配合 proxy_ssl_server_name 使用才生效
proxy_ssl_name 本身不会自动启用 SNI。它必须与 proxy_ssl_server_name on; 同时启用,后者才是开启 SNI 扩展的开关:
-
proxy_ssl_server_name on;→ 告诉 Nginx 在 TLS 握手时发送 SNI 字段 -
proxy_ssl_name "xxx"→ 明确指定该 SNI 字段的内容(字符串)
如果只开 on 而不设 proxy_ssl_name,Nginx 默认使用 proxy_pass 指令中的主机名(若为域名);若 proxy_pass 写的是 IP,则 SNI 为空,多数后端会拒绝或回退到默认站点。
常见误用与注意事项
- 该指令仅影响出站 TLS 连接(即 Nginx 到后端),不影响客户端到 Nginx 的 TLS
- 值必须是合法的 DNS 名称,不能是 IP 地址(SNI 协议规范要求)
- 若后端不支持 SNI(如老旧 OpenSSL 版本),此配置无效,需升级后端或改用单域名部署
- 动态场景下(如按 Host 头路由),可结合
map指令将请求头映射为变量,再赋值给proxy_ssl_name

















