在upstream块中启用proxy_ssl_session_reuse on并配套keepalive、http/1.1长连接、sni传递及tls协议一致性配置,是提升nginx到https静态存储回源性能最轻量零改造方案。

直接在 upstream 块中启用 proxy_ssl_session_reuse on,并确保与后端静态存储服务(如对象存储网关、HTTPS 暴露的 MinIO、Cloudflare R2、S3 兼容 API)的 TLS 连接策略协同,是提升 Nginx 到静态存储 HTTPS 回源性能最轻量、零业务改造的关键手段。
必须放在 upstream 块中配置
该指令仅在 upstream 上下文生效,且只对 https:// 协议后端起作用。写在 http、server 或 location 级别会被忽略:
- ✅ 正确示例:
upstream s3_gateway {<br> server s3.example.com:443;<br> keepalive 32;<br> proxy_ssl_session_reuse on;<br>} - ❌ 错误示例:
location /static/ {<br> proxy_pass https://s3_gateway;<br> proxy_ssl_session_reuse on; }
必须配套 keepalive 与 HTTP/1.1 长连接
SSL 会话复用依赖底层 TCP 连接复用。没有长连接池,复用就无从谈起:
- 在
upstream中设置keepalive 16–64(建议从 32 起步,按并发请求数和后端吞吐调整) - 在对应
location或全局代理上下文中添加:proxy_http_version 1.1;<br>proxy_set_header Connection "";
- 确认静态存储后端返回
Connection: keep-alive;若返回close,Nginx 将主动断连,复用立即失效
确保 SNI 传递与 TLS 协议一致性
静态存储网关常为多租户共 IP 架构(如自建 MinIO 前置 Nginx、CDN 回源路径),微小不匹配即导致握手降级、复用归零:
- 若
upstream使用域名(如s3.example.com:443),必须开启proxy_ssl_server_name on,确保 SNI 正确传递 - 统一 TLS 版本:推荐显式配置
proxy_ssl_protocols TLSv1.2 TLSv1.3;,禁用 TLSv1.0/1.1(不安全且易引发兼容问题) - 若后端启用 session ticket(如 MinIO 默认开启),所有实例需共享同一
ssl_session_ticket_key,否则票据无法解密,复用中断
验证是否真实生效
不能只看配置是否加上,要从行为和日志交叉确认:
- 在
log_format中加入$upstream_ssl_session_reused变量(值为r表示复用,.表示未复用),统计比例 - 抓包观察:用
tcpdump -i any port 443 and host s3.example.com,复用成功时 TLS 握手仅有Change Cipher Spec + Finished,而非完整ClientHello → Certificate流程 - 监控连接状态:
ss -tnp | grep :443,复用率高时活跃连接数应稳定在keepalive × worker_processes附近,而非持续涨落











