Nginx配置SSL证书需三步:获取证书、修改配置启用HTTPS、验证重启;推荐Let's Encrypt免费证书,用certbot自动申请部署;手动配置需设443端口、指定证书路径、启用TLSv1.2+及HSTS,并用return 301实现HTTP跳转HTTPS。

在 Nginx 中配置 SSL 证书,核心是三步:获取证书文件、修改 Nginx 配置启用 HTTPS、验证并重启服务。只要证书路径正确、配置语法无误、端口开放,就能成功启用 HTTPS。
如何申请免费 SSL 证书(推荐 Let's Encrypt)
Let's Encrypt 提供免费、可信、可自动续期的证书,推荐使用 certbot 工具一键申请:
- 确保域名已解析到当前服务器 IP,且 80 端口可被公网访问(Let's Encrypt 会通过 HTTP 验证域名控制权)
- 安装 certbot(以 Ubuntu/Debian 为例):
sudo apt update && sudo apt install certbot python3-certbot-nginx - 运行命令自动申请并配置(假设站点域名为 example.com):
sudo certbot --nginx -d example.com -d www.example.com - certbot 会自动修改 Nginx 配置、申请证书、部署,并设置自动续期任务(通过 systemd timer 或 cron)
Nginx 手动配置 SSL 的关键项
若使用其他渠道获取证书(如腾讯云、阿里云下载的 PEM 格式),需手动编辑 Nginx 配置文件(通常在 /etc/nginx/sites-enabled/your-site 或 /etc/nginx/conf.d/xxx.conf):
- 监听 443 端口并声明 ssl on(Nginx ≥ 1.15.0 可省略,但建议显式写 listen 443 ssl)
- 指定证书文件路径:
ssl_certificate /path/to/fullchain.pem;(含中间证书)
ssl_certificate_key /path/to/privkey.pem; - 启用基础安全协议和加密套件(推荐最小兼容性):
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; - 添加 HSTS 头增强安全性(可选但推荐):
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
HTTP 自动跳转 HTTPS 的写法
避免用户手动输入 http://,应在 80 端口 server 块中强制重定向:
- 写一个独立的 80 端口 server 块(不带 ssl 指令):
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
} - 注意:不要在同一个 server 块里混用 listen 80 和 listen 443 ssl;也不要用 rewrite 实现跳转,return 301 更高效、语义更清晰
- 若使用 CDN(如 Cloudflare),80 端口可能由 CDN 终止,此时跳转逻辑应交由 CDN 配置或后端应用处理
验证与排错要点
配置完成后务必检查语法并测试效果:
- 检查 Nginx 配置是否合法:
sudo nginx -t —— 输出 “test is successful” 才能继续 - 重载配置(不中断服务):
sudo systemctl reload nginx - 浏览器访问 https://example.com,查看地址栏锁图标;用 SSL Labs Test 检查评级和证书链完整性
- 常见报错:
– “SSL certificate error”:证书路径错误、权限不足(Nginx 用户需有读取 privkey.pem 权限)
– “ERR_SSL_PROTOCOL_ERROR”:未开启 443 端口,或防火墙(ufw/iptables)未放行
– 页面资源显示不安全:页面内引用了 http:// 的 CSS/JS,需改为相对协议或 https://


















