https在nginx反向代理中性能损耗可控,关键在于避免双重加密、启用tls 1.3与会话复用、后端走http而非https,并通过实测ttfb定位瓶颈,优化后差距可压缩至5%以内。

HTTPS 协议在 Nginx 反向代理场景下确实会产生可测量的性能损耗,但实际影响程度取决于配置质量、硬件资源与流量特征,而非协议本身“必然慢”。关键不在于损耗是否存在,而在于能否控制在合理区间(通常 10%–30% TPS 下降),并避免因误配放大延迟。
TLS 终止带来的真实开销
HTTPS 的主要损耗来自 TLS 握手和加解密运算。Nginx 在 CPU 层面承担这部分工作,实测显示:
- AES-256-GCM 加密吞吐可达 12 Gbps(Xeon Platinum 8380),远高于多数业务带宽需求
- 单次完整 TLS 1.2 握手平均增加 5–15ms 延迟;启用 TLS 1.3 后可降至 1–3ms(支持 0-RTT)
- 性能下降幅度与并发连接数强相关:连接越短、越频繁,握手占比越高,损耗越明显
配置不当才是性能暴跌的主因
很多“HTTPS 比 HTTP 慢好几倍”的案例,并非 TLS 本身导致,而是反向代理配置触发了隐性瓶颈:
-
后端仍用 HTTPS 转发:如配置
proxy_pass https://backend,等于双重加密解密,CPU 翻倍且延迟叠加 -
未启用连接复用:缺少
proxy_http_version 1.1和proxy_set_header Connection "",导致每个请求新建 TCP+TLS 连接 -
SSL 会话缓存未生效:
ssl_session_cache大小过小或未共享,使复用率低于 30%,大量重复握手 - 证书链冗长或 OCSP Stapling 关闭:每次握手额外发起 DNS 查询与远程验证,增加数百毫秒阻塞
如何做一次有效评估
脱离具体环境谈“损耗百分比”没有意义。推荐按以下方式实测:
- 保持后端服务、压测工具、网络路径完全一致,仅切换 Nginx 的监听协议(HTTP vs HTTPS)
- 使用相同并发数(如 500 用户),采集核心指标:平均响应时间、TPS、Nginx worker CPU 利用率、TIME_WAIT 连接数
- 重点观察“首字节时间(TTFB)”——若 HTTPS 下 TTFB 暴涨而后端处理时间不变,问题一定出在 TLS 或代理层
- 对比开启
ssl_buffer_size 4k与默认值对小资源(CSS/JS)加载的影响,避免 TLS 分片放大延迟
优化后可接近 HTTP 性能
合理调优后,HTTPS 代理的性能差距可压缩至 5% 以内:
- 启用 TLS 1.3 + ECDHE 密钥交换,关闭 TLS 1.0/1.1
- 设置
ssl_session_cache shared:SSL:10m(支持约 4 万会话复用) - 添加
ssl_session_timeout 4h,配合ssl_early_data on(需后端支持) - 后端一律走 HTTP(HTTPS 终止在 Nginx),禁用
proxy_ssl_*相关指令











