优化nginx https内存消耗的核心是让每次握手更轻、复用更多、异常连接更快释放;需收紧ssl_buffer_size(设4k/8k)、ssl_handshake_timeout(设10s),启用shared缓存+ticket双路复用,限制limit_conn与keepalive,并合并虚拟主机、精简配置。

优化 Nginx HTTPS 加密过程中的内存消耗,核心是让每次握手更轻、复用更多、异常连接更快释放——不是靠堆内存,而是精控状态生命周期和资源分配粒度。
收紧 SSL 缓冲与握手超时
默认每个 SSL 连接预分配 16KB 缓冲区,高频建连时易引发内存抖动。应主动调低:
- ssl_buffer_size 设为 4k 或 8k:减小 TLS 记录分片大小,降低握手初期内存占用;
- ssl_handshake_timeout 设为 10s(勿用默认 60s):快速中断慢速或异常握手,防止僵尸连接长期持有内存;
-
禁用老旧协议与高开销 cipher:仅保留
TLSv1.2 TLSv1.3,剔除含 SHA-1、RC4、CBC 模式的套件,减少证书解析与密钥上下文分配压力。
启用双路会话复用机制
完整握手需单独分配密钥计算空间、证书解码缓冲和 OCSP 验证上下文,内存开销远高于复用。必须同时启用服务端缓存 + 客户端票据:
- 在
http块顶层配置 共享缓存:ssl_session_cache shared:SSL:10m(10MB 约支持 4 万个会话); - ssl_session_timeout 设为 10m~20m:太短(如 5m)导致移动端切后台后失效,太长(如 4h)易占满内存且增加泄露风险;
-
开启票据机制:
ssl_session_tickets on;并指定密钥文件:ssl_session_ticket_key /etc/nginx/ssl/ticket.key,将部分状态交由客户端保存,服务端无需维护对应条目。
限制并发连接与长连接行为
内存峰值由并发 SSL 连接数直接驱动,需从连接生命周期入手控制总量:
- 用
limit_conn限制每 IP 或每 server 的并发 SSL 连接数,例如:limit_conn addr 50;; - 设置合理 keepalive 参数:
keepalive_timeout 30s;和keepalive_requests 100;,鼓励复用已有 TLS 上下文,避免频繁重建; - 对可信内网后端,可关闭证书链验证:
proxy_ssl_verify off;,跳过内存密集的 OCSP 和证书链解析环节。
合并虚拟主机与精简配置
多个 HTTPS 站点若各自独立配置,会导致重复加载 SSL 上下文、冗余缓存和指令解析开销:
- 多个域名共用同一
listen 443 ssl http2,证书路径统一放在http块或上层server中,避免每个server块重复定义ssl_session_cache; - 删除未使用的
location块、禁用rewrite(改用try_files),减少正则编译与运行时匹配消耗; - 统一日志策略(如
access_log off放在http块),避免每个虚拟主机单独加载日志模块。
不复杂但容易忽略:每多一个 server 块,Nginx 启动时就多解析一组指令上下文;合并同类站点、统一缓存策略、删掉注释和测试配置,往往比调优参数更能立竿见影地节省内存。











