马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
Nginx 做反代时,后端如果是 HTTPS 站点,偶尔会遇到 TLS 握手失败。想让 Nginx 不去校验后端证书,就要动两条指令:proxy_ssl_server_name 和 proxy_ssl_session_reuse。下面给出完整写法、各自的作用,也顺带说明这套配置不适合直接上生产。
需要加的两条指令
proxy_ssl_server_name on;
proxy_ssl_session_reuse off;
把这两条一起写进对应的 location 块即可,以下内容是配合反代透传头一起用的完整配置:
location /test/ {
proxy_pass https://www.baidu.com/;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_ssl_server_name on;
proxy_ssl_session_reuse off;
}
不推荐在生产环境中使用——关掉校验等于接受了一个可以被中间人利用的链路。
proxy_ssl_server_name 的作用
开启之后,Nginx 与后端建立 SSL/TLS 连接时会把请求头里的 Host 值作为 SNI(Server Name Indication)的一部分带上。SNI 是 TLS 握手的扩展字段,允许客户端在握手阶段声明自己想连的主机名,对单个 IP 上托管多张证书的后端尤其关键——服务端据此挑出对应的那张证书。
如果这条没配或者保持 off,Nginx 不会拿 Host 去构造 SNI,后端一旦依赖 SNI 选证书,握手就会失败。
proxy_ssl_session_reuse 的作用
这条指令控制 Nginx 是否复用与后端之间的 TLS 会话。设为 off 时,每个请求都要走完整握手流程,延迟和后端开销都往上走;设为 on(默认值)则复用已有会话,减少握手次数。
那这里为什么要关?通常有两种情况:后端证书更换频繁,复用旧会话会拿到已经作废的凭据;或者出于安全考虑,宁可每次请求都新建连接。这些都是特定场景下的取舍,不是通用最优解。
改完之后
改完重载 Nginx 让它生效,再访问代理路径确认返回码和响应体。如果后端仍然握手失败,看 error log 里 TLS 握手停在哪一步,再回头核对这两条指令是不是落在了正确的 location 层级。
小结
proxy_ssl_server_name on 解决的是「SNI 没带导致证书选错」,proxy_ssl_session_reuse off 解决的是「证书频繁更换时不想复用旧会话」。前者几乎是反代 HTTPS 后端的常配项,后者属于特殊场景的取舍,默认保持 on 更利于性能。
qidao123.com企服评测-应用市场 编辑提示 |