Ubuntu Nginx SSL性能如何优化
导读:Ubuntu 上 Nginx SSL 性能优化实操指南 一 基础与架构优化 启用并优先使用 TLS 1.3,同时保留 TLS 1.2;禁用 SSLv3/TLS1.0/TLS1.1。TLS 1.3 握手更简洁、性能更好。 使用支持前向保密(...
Ubuntu 上 Nginx SSL 性能优化实操指南
一 基础与架构优化
- 启用并优先使用 TLS 1.3,同时保留 TLS 1.2;禁用 SSLv3/TLS1.0/TLS1.1。TLS 1.3 握手更简洁、性能更好。
- 使用支持前向保密(FS)的 ECDHE 套件,优先 AEAD 套件(如 AES-GCM、ChaCha20-Poly1305)。
- 开启 HTTP/2 或 HTTP/3(QUIC),多路复用显著降低连接与握手开销。
- 打开 长连接(keepalive),让同一连接承载更多请求,减少频繁建连与握手。
- 配置 SSL 会话复用:使用共享会话缓存与会话票据,降低完整握手次数。
- 启用 OCSP Stapling,由服务器在握手时提供证书状态,减少客户端外链查询延迟。
- 使用 HSTS 头,强制浏览器走 HTTPS,减少重定向与协商成本。
- 证书与链要完整,私钥权限最小化(仅 root 可读)。
二 关键 Nginx 配置示例
# /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/ssl.conf
worker_processes auto;
events {
worker_connections 4096;
use epoll;
# Linux 高效事件模型
multi_accept on;
}
http {
# 开启 Gzip(文本类资源收益明显)
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(需可解析 DNS)
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;
# 证书与链
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 参数(若证书非 ECDSA 或需兼容旧客户端)
ssl_dhparam /etc/nginx/dhparam.pem;
# 生成:openssl dhparam -out /etc/nginx/dhparam.pem 2048
# 安全与性能头
add_header Strict-Transport-Security "max-age=31536000;
includeSubDomains;
preload" always;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
# 长连接(按需调整)
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;
}
}
- 若需 HTTP/3(QUIC),在 Ubuntu 上可使用 nginx-quiche 或 cloudflared 等方案,或等待官方模块稳定发布后再启用。
三 证书与密钥优化
- 优先使用 ECDSA 证书(如 prime256v1 或 secp384r1),在同等安全下计算更快、握手更轻;如必须兼容旧客户端,可同时部署 RSA 证书并使用 SNI。
- 生成 DH 参数(2048 位或更高)并配置 ssl_dhparam,避免每次握手重复生成。
- 确保证书链完整(含中间证书),避免客户端额外往返验证。
- 私钥文件权限设为 600,仅 root 可读;证书与密钥路径仅对必要进程可读。
四 系统与内核调优
- 提高文件描述符限制:在 /etc/security/limits.conf 增加
- nginx soft nofile 65535
- nginx hard nofile 65535
并在 systemd 服务中设置 LimitNOFILE=65535。
- 启用并优化内核网络参数(/etc/sysctl.conf):
- net.core.somaxconn = 4096
- net.ipv4.tcp_max_syn_backlog = 4096
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_fin_timeout = 30
- net.ipv4.tcp_slow_start_after_idle = 0
- net.core.netdev_budget_usecs = 20000
执行 sysctl -p 生效。
- 启用 TLS 硬件加速(如服务器 CPU 支持 AES-NI/AVX2):确保 OpenSSL 启用相关指令集,Nginx 会自动受益;无需额外指令。
- 使用 CDN/边缘 TLS 终止:将握手与静态资源卸载到边缘节点,源站仅处理动态请求。
五 验证与压测
- 协议与套件校验:
- openssl s_client -connect example.com:443 -servername example.com -tls1_3
- nmap --script ssl-enum-ciphers -p 443 example.com
- 性能压测(逐步加压,观察握手耗时、P95/P99、QPS):
- wrk -t12 -c400 -d30s https://example.com/
- ab -n 10000 -c 100 https://example.com/
- 在线检测:
- SSL Labs SSL Server Test(评估协议、套件、OCSP、HSTS 等)
- testssl.sh(本地全面检测)
- 观察指标:
- 握手耗时(TLS 1.2 vs 1.3)、会话复用率、OCSP Stapling 命中与时延、CPU 使用率与每秒握手数。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Nginx SSL性能如何优化
本文地址: https://pptw.com/jishu/751492.html
