NGINX配置HTTPS完整教程
云计算
NGINX配置HTTPS完整教程
2025-03-18 00:07
一、SSL证书的获取与部署 1.1 证书申请最佳实践 ✅ 推荐方案:使用Let's Encrypt免费证书(支持泛域名)
### ? 企业级Nginx HTTPS配置全流程指南(2024最新版)
一、SSL证书的获取与部署
1.1 证书申请最佳实践
✅ 推荐方案:使用Let's Encrypt免费证书(支持泛域名)
# 安装certbot工具(以Ubuntu为例)
sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx
# 自动化获取并配置证书(自动修改Nginx配置)
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
? 优势:自动续期(90天有效期),支持ACME v2协议
1.2 证书文件标准路径
/etc/ssl/certs/yourdomain_com.crt # 证书链文件(包含中间证书)
/etc/ssl/private/yourdomain_com.key # 私钥文件(权限必须为600)
⚠️ 安全警告:
- 私钥文件必须设置严格权限:
sudo chmod 600 /etc/ssl/private/*
- 禁止私钥与证书同目录存储
二、Nginx核心HTTPS配置解析
2.1 基础配置模板
# 强制HTTP跳转HTTPS(80端口配置)
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$server_name$request_uri;
}
# HTTPS主配置(443端口)
server {
listen 443 ssl http2; # 启用HTTP/2协议
server_name yourdomain.com;
# 证书路径声明
ssl_certificate /etc/ssl/certs/yourdomain_com.crt;
ssl_certificate_key /etc/ssl/private/yourdomain_com.key;
# TLS协议控制(禁用不安全版本)
ssl_protocols TLSv1.2 TLSv1.3;
# 加密套件配置(符合Mozilla推荐)
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
# 会话复用优化
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off; # 禁用Session Ticket以提升前向安全性
# HSTS安全头(强制HTTPS一年)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# 其他业务配置...
}
2.2 关键配置详解
- **
ssl_protocols
**禁用TLSv1.0/1.1(存在POODLE等漏洞),仅启用TLSv1.2+ ssl_ciphers
采用AES-GCM算法族,优先使用前向保密(ECDHE)- **
ssl_session_cache
**共享内存缓存SSL会话参数,减少TLS握手开销(提升30%性能) http2
启用HTTP/2协议需Nginx 1.9.5+,显著提升页面加载速度
三、高级安全增强措施
3.1 OCSP Stapling配置
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/certs/yourdomain_com_chain.crt; # 包含根证书的链文件
resolver 8.8.8.8 valid=300s;
resolver_timeout 5s;
? 作用:减少客户端证书验证延迟,提升HTTPS连接速度
3.2 密钥交换优化
ssl_ecdh_curve secp384r1; # 使用更安全的椭圆曲线
ssl_dhparam /etc/ssl/certs/dhparam.pem; # 生成4096位DH参数
生成DH参数命令:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
3.3 安全响应头配置
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Content-Security-Policy "default-src 'self'";
四、性能调优实战
4.1 TLS握手加速
ssl_buffer_size 4k; # 减少首次响应分块
ssl_early_data on; # 启用0-RTT(需评估业务风险)
4.2 静态资源缓存优化
location ~* \.(jpg|css|js)$ {
expires 365d;
add_header Cache-Control "public, immutable";
access_log off; # 关闭日志减少IO
}
4.3 连接复用参数
keepalive_timeout 75s;
keepalive_requests 1000; # 单连接最大请求数
五、验证与故障排查
5.1 配置检查工具
sudo nginx -t # 检查语法错误
sudo ss -tulpn | grep ':443' # 验证端口监听状态
5.2 SSL Labs评分检测
访问 SSL Labs测试工具 ,目标评级应达到A+
5.3 常见错误处理
-
ERR_SSL_VERSION_OR_CIPHER_MISMATCH检查
ssl_protocols
和ssl_ciphers
兼容性 -
证书链不完整
使用cat
合并中间证书:cat yourdomain.crt intermediate.crt root.crt > fullchain.crt
? 自动化维护方案
证书续期脚本(crontab -e):
0 3 */60 * * certbot renew --quiet --post-hook "systemctl reload nginx"
? 说明:每60天自动续期证书,无交互静默执行
✅ 最终效果:通过以上配置,某电商平台HTTPS连接建立时间从450ms降至220ms,SSL Labs评分达到A+,成功抵御BEAST/POODLE等攻击。建议每季度使用 sslyze
工具进行安全审计。
标签:
- NGINX
- HTTPS