CentOS 上 Nginx SSL 性能优化实操指南
一 基础与协议套件
listen 443 ssl http2;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_trusted_certificate /etc/nginx/ssl/chain.pem; # 可选,用于 OCSP 装订校验
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 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;
ssl_prefer_server_ciphers on;
以上做法可显著降低握手往返与 CPU 消耗,并提升兼容性与安全基线。二 握手与会话复用
ssl_session_cache shared:SSL:50m; # 约可缓存 20万+ 会话
ssl_session_timeout 1d;
# 多节点建议:
# ssl_session_tickets off;
# ssl_session_ticket_key /etc/nginx/ssl/ticket_key; # 多节点统一并定期轮换
会话复用可显著减少完整握手次数,降低 RTT 与 CPU。三 证书与握手加速
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/chain.pem;
resolver 8.8.8.8 1.1.1.1 valid=300s;
resolver_timeout 5s;
openssl dhparam -out /etc/nginx/dhparam.pem 2048
# 在 server 块:
ssl_dhparam /etc/nginx/dhparam.pem;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
四 连接与架构层优化
keepalive_timeout 65s;
keepalive_requests 1000;
upstream backend {
zone backend 64k;
server 10.0.0.10:8443;
keepalive 32;
}
stream {
server {
listen 443 ssl;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
proxy_pass backend:8443;
}
}
连接与架构层优化能减少握手次数、提升并发与整体吞吐。五 系统与 OpenSSL 层优化
openssl s_client -connect example.com:443 -servername example.com -alpn h2,http/1.1
curl -I --http2 https://example.com
openssl speed -evp aes-128-gcm -seconds 5
openssl speed -evp chacha20-poly1305 -seconds 5