优化Nginx SSL性能的核心措施
禁用不安全的SSLv3及更低版本,仅启用TLSv1.2及以上版本(优先支持TLSv1.3)。TLSv1.3减少了握手轮次(从2次减少到1次),提升了握手效率;TLSv1.2则是当前广泛兼容的安全版本。
配置示例:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
优先使用ECDHE(椭圆曲线迪菲-赫尔曼)密钥交换算法(支持前向保密)搭配AES-GCM或CHACHA20-POLY1305加密算法。这些算法在保证安全的同时,性能优于传统RSA密钥交换。避免使用DES、RC4等弱算法。
配置示例:
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
通过共享内存缓存SSL会话信息,减少重复握手次数。ssl_session_cache设置为shared:SSL:<size>(如10MB),ssl_session_timeout设置会话有效期(如10分钟)。对于多实例Nginx,可通过stream模块配置跨实例共享缓存。
配置示例:
http {
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off; # 禁用会话票证(可选,进一步减少握手开销)
}
OCSP Stapling让服务器主动获取证书状态(而非客户端查询CA),减少握手时的延迟。配置时需指定证书链文件和DNS解析器。
配置示例:
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
HTTP/2的多路复用特性可减少TCP连接数,提升并发性能。只需在listen指令中添加http2参数即可。
配置示例:
server {
listen 443 ssl http2;
server_name example.com;
# 其他SSL配置...
}
net.core.somaxconn)、启用SYN Cookie防止DDoS(net.ipv4.tcp_syncookies=1)、优化文件描述符限制(fs.file-max=65536)。net.ipv4.tcp_congestion_control=bbr),提升网络传输效率。sudo sysctl -w net.core.somaxconn=4096
sudo sysctl -w net.ipv4.tcp_syncookies=1
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
sudo sysctl -w fs.file-max=65536
对于高流量场景,可使用支持SSL加速的硬件(如加密卡)或启用Nginx的ssl_engine指令(需硬件支持),将加密计算卸载到硬件,减轻CPU负担。
配置示例:
ssl_engine openssl; # 根据硬件型号调整
nginx -T检查配置是否生效,通过top、ss等命令监控CPU、内存及连接状态,或使用Prometheus+Grafana搭建可视化监控系统。以上措施需根据实际业务场景(如流量大小、证书类型)调整参数(如缓存大小、超时时间),并通过压力测试(如ab、wrk)验证优化效果。