1. 升级Nginx与OpenSSL至最新版本
确保系统安装最新版本的Nginx和OpenSSL,新版本通常包含性能优化(如更快的加密算法实现)和安全补丁,能有效提升SSL处理效率。使用以下命令更新:
sudo apt update && sudo apt upgrade nginx openssl
2. 优化SSL/TLS协议与加密套件
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS13+AESGCM+AES128:TLS13+AESGCM+AES256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
3. 启用HTTP/2协议
HTTP/2支持多路复用(单一连接并行处理多个请求),减少SSL握手次数,显著提升页面加载速度。在Nginx配置中添加http2
参数:
server {
listen 443 ssl http2;
# 其他配置...
}
4. 配置SSL会话缓存与票证
通过会话缓存复用SSL握手信息,减少重复计算;禁用会话票证(Session Tickets)以避免潜在的安全问题。在http
块中添加:
http {
ssl_session_cache shared:SSL:10m; # 共享内存缓存,大小10MB(可根据流量调整)
ssl_session_timeout 1h; # 会话有效期1小时
ssl_session_tickets off; # 禁用会话票证
}
5. 启用OCSP Stapling
OCSP Stapling让服务器主动获取证书状态(而非客户端向CA查询),减少客户端握手时的延迟,提升隐私性。配置如下:
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/ca-bundle.pem; # CA根证书+中间证书路径
resolver 8.8.8.8 8.8.4.4 valid=300s; # DNS解析器及缓存时间
resolver_timeout 5s;
6. 调整Nginx核心性能参数
worker_processes
为CPU核心数(auto
可自动检测),worker_connections
为每个工作进程的最大连接数(如1024):worker_processes auto;
events {
worker_connections 1024;
use epoll; # Linux下高性能事件模型
multi_accept on; # 一次性接受多个连接
}
sendfile
(零拷贝技术)和tcp_nopush
(合并小包)提升静态文件传输效率:sendfile on;
tcp_nopush on;
tcp_nodelay on; # 禁用Nagle算法,减少延迟
keepalive_timeout 65; # 保持连接超时时间
keepalive_requests 100; # 单个连接最大请求数
7. 优化系统资源限制
/etc/security/limits.conf
:* soft nofile 65535
* hard nofile 65535
并在/etc/systemd/system/nginx.service.d/override.conf
中覆盖systemd限制:[Service]
LimitNOFILE=65535
/etc/sysctl.conf
优化网络性能:net.core.somaxconn = 65535 # 监听队列最大长度
net.ipv4.tcp_max_syn_backlog = 65535 # SYN队列大小
net.ipv4.tcp_tw_reuse = 1 # 复用TIME-WAIT连接
net.ipv4.tcp_fin_timeout = 30 # TIME-WAIT超时时间(秒)
应用更改:sudo sysctl -p
8. 使用强DH参数(仅TLS 1.2)
TLS 1.2需要DH参数进行密钥交换,生成强参数(4096位)以抵御暴力破解:
sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096
在Nginx配置中引用:
ssl_dhparam /etc/nginx/dhparam.pem;
9. 启用Gzip压缩
减少传输数据量,提升页面加载速度(注意:避免压缩图片、视频等已压缩文件)。配置如下:
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6; # 压缩级别(1-9,6为平衡点)
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
10. 监控与持续调优
stub_status
模块查看SSL连接状态,或通过第三方工具(如Prometheus+Granafa)监控SSL握手时间、握手次数等指标。nginx -t
检查配置语法,使用certbot renew --dry-run
测试证书自动续期,确保证书不会过期。ssl_session_cache
的大小(如从10m增加到20m),避免缓存溢出导致的性能下降。