proxy_ssl_server_name
`proxy_ssl_server_name` 指令为被代理的请求启用 SNI,允许 NGINX 在 SSL 握手中发送服务器名称。 — NGINX HTTP Core
proxy_ssl_server_name
httpserverlocation
语法proxy_ssl_server_name on | off;
默认值off
上下文http, server, location
模块NGINX HTTP Core
参数flag
说明
`proxy_ssl_server_name` 指令控制在 NGINX 代理到另一台服务器的 SSL/TLS 请求中是否包含 Server Name Indication (SNI) 字段。当设置为 `on` 时,NGINX 会在 SSL 握手中包含来自 `Host` 请求头的主机名,这对于在同一 IP 地址上为不同主机名使用多个 SSL 证书的服务器来说是必需的。在使用共享 IP 在单台服务器上托管多个域名的场景中,这尤其重要;可以根据客户端提供的 SNI 信息选择正确的证书。 `proxy_ssl_server_name` 指令可用于多个上下文:`http`、`server` 和 `location` 配置块,并且期望接收一个标志作为参数。将此指令设置为 `on` 会启用 SNI,设置为 `off` 则会禁用 SNI。默认情况下,该指令为 `off`,这意味着除非显式启用,否则不会使用 SNI。需要注意的是,如果后端服务器不支持 SNI,可能无法提供正确的证书,从而导致 SSL 连接错误。 当后端服务器上存在多个 SSL 证书时,该指令特别有用,因为它允许 NGINX 根据请求的主机名动态选择合适的证书,从而确保证书正确终止并增强被代理连接的整体安全性。
配置示例
location /api {
proxy_pass https://backend.example.com;
proxy_ssl_server_name on;
}⚠
确保后端服务器支持 SNI;否则,将该指令设置为 'on' 可能会导致 SSL 错误。
⚠
如果启用了该指令,将请求代理到无法正确处理 SNI 的旧服务器可能会引发问题。