在upstream块中启用proxy_ssl_session_reuse on,并协同keepalive、http/1.1长连接、sni传递及tls版本统一,是零代码提升https回源效率的核心手段;需配合日志变量$upstream_ssl_session_reused验证复用实效。

直接在 upstream 块中启用 proxy_ssl_session_reuse on,并确保与后端 TLS 版本、SNI 传递、连接保活策略协同,是提升缓存系统回源 HTTPS 后端效率最有效且零代码改造的手段。
必须放在 upstream 块中配置
该指令仅在 upstream 上下文生效,对 HTTPS 后端起作用。写在 http、server 或 location 级别会被忽略:
- ✅ 正确:
upstream cache_backend {<br> server api.example.com:443;<br> keepalive 32;<br> proxy_ssl_session_reuse on;<br>} - ❌ 错误:
location / {<br> proxy_pass https://cache_backend;<br> proxy_ssl_session_reuse on;
必须配套 keepalive 和 HTTP/1.1 长连接
TLS 会话复用依赖底层 TCP 连接复用。没有长连接,复用就无从谈起:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
- 在
upstream中设置keepalive 16–64(根据后端吞吐能力调整) - 在对应
location或upstream的代理块中添加:proxy_http_version 1.1;<br>proxy_set_header Connection '';
- 确认后端返回
Connection: keep-alive;若返回close,Nginx 会主动断连,复用立即失效
确保 SNI 一致与 TLS 协议兼容
哪怕微小不匹配,也会导致握手降级,复用率归零:
- 若
upstream使用域名(如api.example.com:443),必须加proxy_ssl_server_name on,确保 SNI 正确传递 - 统一配置 TLS 版本:
proxy_ssl_protocols TLSv1.2 TLSv1.3;,禁用不安全且易不兼容的 TLSv1.0/1.1 - 多实例后端启用 session ticket 时,所有节点必须共享同一
ssl_session_ticket_key,否则票据无法解密,复用中断
验证是否真实生效
不能只看配置是否加上,要从行为和日志交叉确认:
- 在
log_format中加入变量:'$upstream_ssl_session_reused'(值为r表示复用,.表示未复用) - 抓包观察:用
tcpdump过滤后端端口,复用成功时 TLS 握手仅有Change Cipher Spec + Finished,而非完整 ClientHello → Certificate 流程 - 监控连接状态:
ss -tnp | grep :443,复用率高时活跃连接数应稳定在keepalive × worker_processes附近,而非持续涨落










