Apache SSL/TLS性能优化指南

一 基础准备与模块启用
- 确保操作系统与 Apache 软件版本保持最新,安装并启用关键模块:mod_ssl、mod_http2、mod_deflate、mod_headers。在 CentOS/RHEL 中可使用:sudo yum install httpd mod_ssl;在 Debian/Ubuntu 中可使用:sudo apt install apache2-mod-ssl libapache2-mod-http2。模块启用完成后记得重启 Apache 服务。
- 使用 TLS 证书链完整 的部署方式(将中间证书与服务器证书正确合并或配置完整证书链),可减少客户端证书校验时的额外往返请求。
- 如果整体架构允许,建议将 SSL/TLS 终止部署在前置负载均衡或 CDN,由专用服务负责 HTTPS 加解密,从而有效降低源站服务器 CPU 消耗,提升 Apache 性能。
二 核心 SSL/TLS 配置优化
- 启用现代安全协议:优先使用 TLSv1.3,并仅保留 TLSv1.2/1.3,同时禁用 SSLv2/3、TLSv1.0/1.1,兼顾安全性与连接效率。
- 优化密码套件及优先级:启用 ECDHE 以实现 PFS(前向保密),并让服务器优先选择安全套件(例如:ECDHE-RSA-AES128-GCM-SHA256、ECDHE-RSA-AES256-GCM-SHA384 等),同时禁用 NULL、MD5、DES、RC4 等弱加密算法与不安全套件。
- 通过会话复用提升 HTTPS 性能:开启 SSLSessionCache(例如基于共享内存的 shmcb),并设置合理超时(如 300 秒),以减少完整 SSL/TLS 握手次数并加快访问速度。
- 启用在线证书状态校验优化:开启 OCSP Stapling,并配置 SSLStaplingCache,减少客户端向 CA 发起 OCSP 查询的延迟,提升 HTTPS 连接体验。
- 提升连接层效率:启用 KeepAlive,设置合适的 MaxKeepAliveRequests(如 100)和 KeepAliveTimeout(如 5 秒),实现 TCP/SSL 连接复用,降低重复握手成本。
- 启用内容压缩:使用 mod_deflate 对文本类资源进行压缩,例如 text/html、text/css、application/ja vascript 等,可减少传输体积并提升页面加载速度。
- 加强传输层安全策略:添加 HSTS 响应头(如:max-age=63072000;includeSubDomains;preload),强制浏览器后续始终通过 HTTPS 访问站点。
- 开启 HTTP/2 多路复用:配置 HTTP/2(Protocols h2 http/1.1),让单个连接并行传输多个请求,减少握手开销并缓解队头阻塞问题。
三 推荐配置示例
# 仅允许 TLS 1.2/1.3,优先 ECDHE 与 AEAD 套件
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305
SSLHonorCipherOrder On
# 会话复用
SSLSessionCache shmcb:/var/run/apache2/ssl_scache(512000)
SSLSessionCacheTimeout 300
# OCSP Stapling
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
SSLStaplingResponderTimeout 5
SSLStaplingVerify on
# HTTP/2
Protocols h2 http/1.1
# 连接与压缩
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/ja vascript需要注意的是,具体路径和模块名称要根据不同 Linux 发行版进行调整。例如在 CentOS 环境中,shmcb 路径通常可以设置为 /var/run/httpd/ssl_scache 。
四 验证与上线流程
- 语法检查与性能评估:配置变更前先执行 apachectl configtest;再结合 ab/siege 等压测工具进行基线测试,重点观察 TPS、SSL 握手延迟、CPU 等指标变化。
- 配置结果核查:通过 openssl s_client -connect yourdomain:443 -tls1_2/1_3 验证实际启用的协议版本与密码套件;也可借助在线检测工具(如 SSL Labs)检查评分、证书链完整性与安全配置。
- 渐进式发布:建议先在灰度环境或业务低峰时段启用新配置,再逐步扩大范围;上线后持续监控 error.log/access.log 以及核心业务指标。
- 资源与边界控制:根据服务器规格合理调整 MaxRequestWorkers/MaxClients 与 KeepAlive 相关参数,避免高并发下出现连接风暴或内存资源耗尽。
五 进阶与架构建议
- 在高并发业务场景下,优先考虑将 TLS 终止放在负载均衡或 CDN,让源站仅处理明文 HTTP 请求,从而显著降低 Apache 服务器的加解密压力。
- 如业务场景适合,可启用 HTTP/2 Server Push 进一步减少请求往返次数;对于不支持该特性的客户端,可自动回退到兼容模式。
- 如果性能瓶颈仍然集中在 CPU,建议进一步考虑 SSL 加速卡、硬件加速方案 或升级到更高性能的云服务器实例规格。
