Nginx SSL 配置
在现代 Web 应用中,启用 HTTPS 已经是标配。 Nginx 作为常见的 Web 服务器,可以通过 SSL/TLS 配置实现加密通信,保护用户数据安全,同时提升网站可信度。
🔧 准备工作
获取 SSL 证书
- 从权威 CA 机构申请
- 或使用 Let’s Encrypt 免费证书
证书文件
通常包含:
cert.pem/fullchain.pem:证书文件privkey.pem:私钥文件
确认 Nginx 已支持 SSL
bashnginx -V 2>&1 | grep -o with-http_ssl_module如果有输出
with-http_ssl_module,说明已支持 SSL 模块。
🚀 基本配置
nginx
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
root /var/www/html;
index index.html;
}
}🔁 HTTP 自动跳转 HTTPS
nginx
server {
listen 80;
server_name www.example.com;
return 301 https://$host$request_uri;
}这样所有 http:// 请求都会跳转到 https://。
🔒 推荐优化配置
1. 只启用安全协议
nginx
ssl_protocols TLSv1.2 TLSv1.3;2. 安全加密套件
nginx
ssl_ciphers EECDH+AESGCM:EECDH+CHACHA20:!aNULL;
ssl_prefer_server_ciphers on;3. 开启会话缓存
nginx
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1h;4. HSTS(强制使用 HTTPS)
nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;🔐 Let’s Encrypt 自动化
推荐使用 Certbot 工具自动申请和续期 SSL 证书。
安装:
bash
sudo apt install certbot python3-certbot-nginx申请证书:
bash
sudo certbot --nginx -d example.com -d www.example.com测试自动续期:
bash
sudo certbot renew --dry-run🛠️ 常见问题
浏览器提示证书不安全
- 确认使用的是正规 CA 颁发的证书
- 确认证书链完整(fullchain.pem)
Nginx 启动报错 "SSL: error:0909006C"
- 检查证书文件和私钥是否匹配
HTTP 访问未跳转到 HTTPS
- 确认是否配置了
return 301 https://...规则
- 确认是否配置了
🚦 应用场景
- 网站全站 HTTPS
- 接口服务加密传输
- 配合 反向代理 / 负载均衡,提升安全性
- 与 限流 / 缓存 一起,构建高性能安全网关
