用 let’s encrypt 通过 certbot 免费申请并自动部署 ssl 证书实现全站 https,需确保域名已解析、80 端口开放且 nginx 正常运行;证书存于 /etc/letsencrypt/live/,支持自动续期。

用 Nginx 配置免费 SSL 证书实现全站 HTTPS,核心是用 Let’s Encrypt(通过 certbot 工具)自动申请并部署证书,再在 Nginx 中正确引用。整个过程无需付费,且支持自动续期。
前提条件:域名与服务器准备
确保满足以下三点,否则无法成功签发证书:
- 你拥有一个已备案(国内)或可解析的**真实域名**(如 example.com),不能是纯 IP 或 localhost;
- 该域名的 DNS A 记录已指向你的服务器公网 IP;
- Nginx 正常运行,且 80 端口对外可访问(Let’s Encrypt 的 HTTP-01 验证需通过 80 端口)。
安装 certbot 并申请证书
以 Ubuntu/Debian 系统为例(CentOS 使用 dnf install certbot python3-certbot-nginx):
- 添加官方仓库并安装:
sudo apt update && sudo apt install certbot python3-certbot-nginx - 直接为域名申请证书(自动配置 Nginx):
sudo certbot --nginx -d example.com -d www.example.com - 按提示输入邮箱、同意协议、选择是否重定向 HTTP 到 HTTPS(推荐选 2: Redirect)。
成功后,证书文件会存放在 /etc/letsencrypt/live/example.com/ 下,包括 fullchain.pem 和 privkey.pem。
Nginx 配置 HTTPS 站点(手动方式)
如果 certbot 未自动修改配置,或你想自定义,编辑站点配置文件(如 /etc/nginx/sites-available/example.com):
- 保留原有 80 端口 server 块,添加 443 端口的 HTTPS server 块;
- 指定证书路径:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; - 启用必要安全配置(建议复制):
ssl_protocols TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers off;ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
设置自动续期与验证
Let’s Encrypt 证书有效期为 90 天,必须定期续期。certbot 默认已配置 systemd 定时任务(Ubuntu 20.04+),可手动测试:
- 模拟续期检查:
sudo certbot renew --dry-run(不实际更新,只检测流程); - 若通过,说明自动续期已就绪;失败则根据报错检查防火墙、DNS 或 Nginx 是否占用 80 端口;
- 如需手动强制续期:
sudo certbot renew --force-renewal(慎用,有调用频率限制)。
续期成功后,Nginx 会自动重载配置(certbot 插件默认触发 systemctl reload nginx)。











