以下是一个关于Nginx SSL加速的详细配置示例,涵盖基础配置、性能优化、安全加固及高级功能模块:
一、基础SSL/TLS配置
# 主配置文件 nginx.conf
http {
# 定义SSL证书路径
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_trusted_certificate /etc/nginx/ssl/chain.pem; # 证书链验证
# SSL协议版本控制
ssl_protocols TLSv1.3; # 仅启用最新协议
ssl_prefer_server_ciphers on; # 优先使用服务器算法
# 加密套件配置(现代浏览器优化)
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_ecdh_curve secp384r1; # 椭圆曲线选择
# 会话管理
ssl_session_cache shared:SSL:50m; # 共享内存区
ssl_session_timeout 1d; # 会话超时时间
ssl_session_tickets off; # 禁用会话票证(需OCSP)
# OCSP装订配置
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 1.1.1.1 valid=300s; # DNS解析器配置
}
二、性能优化配置
1. SSL会话缓存
http {
# 分层会话缓存(需Nginx Plus)
ssl_session_cache shared:SSL:50m;
ssl_session_ticket_key /etc/nginx/ssl/ticket_key; # 会话票证密钥
ssl_session_ticket_key_rotates 3; # 密钥轮换周期
}
2. 硬件加速(需OpenSSL引擎)
http {
# 配置SSL引擎(以Intel QAT为例)
ssl_engine qat;
ssl_early_data on; # 启用0-RTT(需TLSv1.3)
}
3. 连接复用优化
http {
# 保持长连接
keepalive_timeout 65s;
keepalive_requests 1000;
# 后端连接池
upstream ssl_backend {
zone ssl_backend 64k;
server 10.0.0.10:8443;
keepalive 32; # 保持32个到后端的长连接
}
}
三、安全加固配置
1. 严格传输安全(HSTS)
http {
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
}
2. 证书透明度
http {
ssl_ct on;
ssl_ct_static_scts /etc/nginx/ssl/scts.der; # 静态SCT列表
}
3. 证书撤销检查
http {
ssl_crl /etc/nginx/ssl/crl.pem; # 证书撤销列表
ssl_verify_client optional; # 客户端证书验证(可选)
}
四、高级功能配置
1. HTTP/2优化
http {
# 启用HTTP/2协议
listen 443 ssl http2;
# HTTP/2专用优化
http2_max_field_size 16k;
http2_max_header_size 32k;
http2_max_requests 1000;
http2_max_concurrent_streams 128;
}
2. Brotli压缩
http {
# 启用Brotli压缩(需编译支持)
brotli on;
brotli_comp_level 6;
brotli_types text/css text/javascript application/javascript image/svg+xml;
brotli_window 512k; # 增大压缩窗口
}
3. 动态模块加载
load_module modules/ngx_http_ssl_module.so;
load_module modules/ngx_http_v2_module.so;
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
五、监控与维护配置
1. 实时状态监控
http {
server {
listen 8080;
server_name status.example.com;
location /ssl_status {
# 自定义SSL状态页(需Lua模块)
content_by_lua_block {
local ssl = ngx.ctx.connection.ssl
ngx.say("SSL Protocol: ", ssl.protocol)
ngx.say("SSL Cipher: ", ssl.cipher)
ngx.say("Session Reused: ", ssl.session_reused)
}
allow 192.168.1.0/24;
deny all;
}
}
}
2. 证书轮换脚本
#!/bin/bash
# 证书轮换脚本示例
NEW_CERT="/etc/nginx/ssl/new_fullchain.pem"
NEW_KEY="/etc/nginx/ssl/new_privkey.pem"
if nginx -t -c /etc/nginx/nginx.conf; then
mv $NEW_CERT /etc/nginx/ssl/fullchain.pem
mv $NEW_KEY /etc/nginx/ssl/privkey.pem
nginx -s reload
else
echo "配置验证失败,证书轮换中止"
fi
六、性能调优建议
-
内核参数优化
# 调整TCP参数 sysctl -w net.core.somaxconn=65535 sysctl -w net.ipv4.tcp_max_syn_backlog=65535 sysctl -w net.ipv4.tcp_fin_timeout=30 sysctl -w net.ipv4.tcp_tw_reuse=1 -
Nginx配置优化
- 调整
worker_processes匹配CPU核心数 - 使用
multi_accept on批量接受连接 - 对高频服务配置
reuseport参数(需Linux 3.9+)
- 调整
-
连接管理
- 使用
so_keepalive=on启用TCP Keepalive - 配置
proxy_timeout合理值防止连接泄漏
- 使用
七、测试与验证
-
SSL质量检查
# 使用SSL Labs测试 npx ssl-labs-scan --host www.example.com --publish off # 使用openssl命令测试 openssl s_client -connect example.com:443 -tls1_3 -
性能测试
# 使用wrk进行压力测试 wrk -t4 -c1000 -d30s --latency https://example.com/ # 观察SSL握手时间 openssl s_time -connect example.com:443 -www / -new -
实时监控
# 查看SSL会话缓存状态 nginx -V 2>&1 | grep ssl_session_cache # 分析访问日志 awk '{print $12}' /var/log/nginx/access.log | grep -c "h2"
八、注意事项
- 证书管理:使用ACME协议自动续期证书(如Certbot)
- 协议兼容:保留TLSv1.2用于遗留客户端(需评估安全风险)
- 密钥安全:使用HSM或加密文件系统保护私钥
- 日志轮转:配置
logrotate定期切割SSL相关日志
该配置示例实现了Nginx SSL加速的核心功能,可根据实际需求扩展以下方向:
- 集成Let’s Encrypt自动证书管理
- 配置双栈IPv4/IPv6监听
- 实现客户端证书认证(mTLS)
- 添加速率限制(通过
limit_req模块)
建议通过专业测试工具(如Qualys SSL Labs)验证配置效果,并结合监控系统(Prometheus+Grafana)构建完整性能分析体系。
231

被折叠的 条评论
为什么被折叠?



