Ubuntu 上 Nginx SSL 性能优化实操
一 基础与架构优化
二 Nginx 关键配置示例
# /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/ssl.conf
worker_processes auto;
events {
worker_connections 4096;
use epoll;
multi_accept on;
}
http {
# 文本资源压缩
gzip on;
gzip_vary on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# SSL 会话复用(减少完整握手)
ssl_session_cache shared:SSL:10m; # 约可缓存 4000 个会话/MB
ssl_session_timeout 1d;
ssl_session_tickets on; # TLS 1.2 及以下使用票据
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
resolver 1.1.1.1 8.8.8.8 valid=300s;
resolver_timeout 5s;
server {
listen 443 ssl http2;
server_name example.com;
# 证书与链(确保 fullchain 包含中间证书)
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 协议与套件(优先 AEAD + FS)
ssl_protocols TLSv1.2 TLSv1.3;
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;
# 椭圆曲线与 DH 参数(RSA 证书或需兼容旧客户端时配置)
ssl_ecdh_curve X25519:secp384r1;
ssl_dhparam /etc/nginx/dhparam.pem; # 生成:openssl dhparam -out /etc/nginx/dhparam.pem 2048
# 首包优化(减少 TLS 记录大小,降低首包延迟)
ssl_buffer_size 4k;
# 安全与性能头
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
# 长连接(按并发与 RTT 调整)
keepalive_timeout 70;
keepalive_requests 1000;
location / {
root /var/www/html;
index index.html;
}
}
# HTTP -> HTTPS 301
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
}
openssl dhparam -out /etc/nginx/dhparam.pem 2048(或 4096,首次生成较慢,建议离线生成并定期轮换)。三 系统与内核调优
nginx soft nofile 65535nginx hard nofile 65535LimitNOFILE=65535。net.core.somaxconn = 4096net.ipv4.tcp_max_syn_backlog = 4096net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_fin_timeout = 30net.ipv4.tcp_slow_start_after_idle = 0sysctl -p 生效。四 验证与压测
sudo nginx -t && sudo systemctl reload nginx。openssl s_client -connect example.com:443 -servername example.com -tls1_3nmap --script ssl-enum-ciphers -p 443 example.comwrk -t12 -c400 -d30s https://example.com/ab -n 10000 -c 100 https://example.com/五 证书与续期自动化
sudo apt update && sudo apt install certbot python3-certbot-nginxsudo certbot --nginx -d example.com -d www.example.com0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx"