apache https性能优化需协同调整tls会话缓存(如sslsessioncache大小)和linux内核tcp缓冲区(tcp_rmem/tcp_wmem),并启用sslsessiontickets、tlsv1.3、ocsp装订等特性,同时验证缓存命中与连接空间使用情况。

Apache 本身不直接控制 HTTPS 数据传输过程中的 TCP 缓冲区大小,这部分由 Linux 内核参数决定。但 HTTPS 场景下,真正影响性能的缓冲区设置集中在两个层面:TLS 层会话复用缓存和底层网络连接的内核缓冲区。两者需协同调整,否则单侧优化效果有限。
SSLSessionCache 共享内存大小要设够,但别堆过头
这是 Apache 中唯一由配置文件显式控制、且对 HTTPS 性能影响最直接的“缓冲区”类设置。
-
SSLCertificateFile和SSLCertificateKeyFile配置好后,必须配SSLSessionCache才能复用 TLS 会话,避免每次握手都走完整流程。 -
shmcb:/var/run/ssl_scache(512000)中的数字单位是字节,不是 MB 或条目数。512000 = 512 KB,实际约存 500–1000 个会话(取决于证书长度和 TLS 版本)。 - 单机 QPS 超 300,建议从
10485760(10 MB)起步;QPS 稳定在 800+ 且retrieves hit持续偏低,可试20971520(20 MB)。 - 超过 30 MB 容易挤占
mod_status或mpm的共享内存空间,反而引发启动失败或状态监控异常。 - 必须确认:缓存路径目录(如
/var/run/ssl_scache)属主是 Apache 运行用户(如www-data),否则 Apache 启动时静默跳过初始化。
Linux 内核 TCP 缓冲区才是 HTTPS 数据流的“管道直径”
HTTPS 数据仍走 TCP,大文件下载、API 响应体较大时,瓶颈常在此。Apache 不写 tcp_rmem,但必须调。
- 查当前值:
sysctl net.ipv4.tcp_rmem,典型输出4096 131072 6291456(最小 4KB / 默认 128KB / 最大 6MB)。 - 高吞吐 HTTPS 服务(如视频 API、大附件下载)建议调为:
sudo sysctl -w net.ipv4.tcp_rmem="4096 524288 16777216"(即最大 16MB) - 同步必须调大硬上限:
sudo sysctl -w net.core.rmem_max=16777216,否则setsockopt()会被截断,调了也白调。 - 上传场景(如大文件 POST)同样依赖
tcp_wmem,建议同步调整:net.ipv4.tcp_wmem="4096 524288 16777216"和net.core.wmem_max=16777216。
别忽略 TLS 层的隐性缓冲行为
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 启用
SSLSessionTickets On,让客户端用 ticket 复用会话,比 Session ID 更轻量,减少服务端缓存压力。旧设备不支持时才退回到 Session ID 模式。 -
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2 +TLSv1.3—— TLS 1.3 握手只需 1-RTT,且默认启用 0-RTT(需业务允许),大幅降低首包延迟,间接缓解缓冲区等待压力。 -
SSLUseStapling On+SSLStaplingCache shmcb:/var/run/ssl_stapling(512000)可减少 OCSP 查询往返,避免阻塞 TLS 握手流程。
验证是否生效,不能只看配置有没有写
- 开启
mod_status并访问/server-status?auto,搜索SSLSessionCache,确认:-
current entries > 0(缓存已激活) -
total retrieves hit > 0(客户端确实在复用) -
cache usage在 10%–40% 波动(太低说明没压上,太高说明快淘汰)
-
- 用
ss -i观察活跃 HTTPS 连接的rcv_space和snd_space,确认是否接近你设的tcp_rmem[2]和tcp_wmem[2]值。
不复杂但容易忽略。










