← 返回

Linux上结合Nginx配置域名证书并自动续期

复制为 Markdown

核心原理: Let’s Encrypt 提供有效期为90天的免费证书。虽然期限短,但这正是其安全策略的一部分。幸运的是,我们可以利用 Certbot 这个强大的工具来自动化申请、部署和续签流程。

准备工作:

  1. 拥有一个域名:在大陆服务的话还需要先备案,这是域名能公网访问的关键。
  2. 域名已正确解析到服务器IP: 确保您在域名注册商处的DNS A记录指向了您当前服务器的公网IP地址。
  3. 服务器环境: 推荐使用 Nginx,Certbot 对 Nginx 支持良好。您需要有服务器的管理员权限。

安装 Certbot 及其 Nginx 插件

Certbot 是 Let’s Encrypt 官方推荐的客户端工具,可以自动处理证书的获取、安装和续订。

  • CentOS/RHEL (yum)
bash
sudo yum install certbot python3-certbot-nginx
Ubuntu/Debian (apt):bash编辑
  • Ubuntu/Debian (apt):
bash
sudo apt update
sudo apt install certbot python3-certbot-nginx

申请并部署 SSL 证书

Certbot 可以直接修改您的 Nginx 配置文件来启用 HTTPS。

  1. 停止 Nginx 服务(可选但推荐): 有时 Certbot 需要临时启动一个小型 Web 服务器来完成域名验证,确保 Nginx 停止可以避免端口冲突。验证通过后,Certbot 会自动帮你重启 Nginx。
bash
sudo systemctl stop nginx
  1. 运行 Certbot 申请证书: 将 yourdomain.com 替换为您自己的域名。如果还有子域名(如 www.yourdomain.com),可以一起加上,用空格隔开(带上 -d 参数)。
bash
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com -d other.youdomain.com

按照提示操作:

  • 输入邮箱地址(用于紧急通知)。

  • 同意服务条款。

  • 询问是否同意共享邮箱(可选)。

  • 关键一步: Certbot 会询问您希望如何配置 HTTPS:

No redirect - 保留 HTTP 和 HTTPS 两种访问方式。
Redirect - 强烈推荐。选择此项,Certbot 会自动在 Nginx 配置中添加规则,将所有 HTTP 请求重定向到 HTTPS。
Certbot 会自动完成域名验证、获取证书、配置 Nginx 并重新加载服务。

如果 Nginx 没有自动启动的话,可以手动启动:

bash
sudo systemctl start nginx

配置自动续签

Let’s Encrypt 证书只有90天有效期,因此必须配置自动续签。

  1. 创建 Cron 任务: 使用 crontab 来设置定时任务。
bash
sudo crontab -e
  1. 添加续签命令: 在打开的编辑器中,添加以下行。这表示每天凌晨2点执行一次续签检查,只有当证书快过期时才会真正更新。
bash
0 2 * * * /usr/bin/certbot renew --quiet --deploy-hook "systemctl reload nginx"

–quiet: 静默模式,不输出日志信息。
–deploy-hook “systemctl reload nginx”: 这个钩子函数非常重要。当证书成功续签后,它会自动重载 Nginx 配置,使新证书生效,无需人工干预。

  1. 测试自动续签(仅测试,不会实际更新证书)
bash
sudo certbot renew --dry-run

如果此命令没有报错,这说明自动续签成功。

最热文章