You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Certbot为Nginx配置未提及的域名生成多域名SSL证书

我来帮你搞定这个问题!Certbot的Nginx插件确实只会扫描现有配置文件里的域名,所以要给未配置的b.coma.com一起生成证书,有两个靠谱的办法,看你偏好哪种:

方法1:临时添加Nginx配置让Certbot识别b.com

这种方法利用Certbot对Nginx配置的自动检测,步骤很直观:

  • b.com创建一个极简的Nginx配置文件,比如/etc/nginx/sites-available/b.com,内容可以是:
server {
    listen 80;
    server_name b.com www.b.com; # 如果需要覆盖www子域名就加上,不需要可以删掉
    root /var/www/html; # 直接复用a.com的webroot目录就行
    location / {
        return 200 "Temporary setup for Certbot";
    }
}
  • 建立软链接到启用站点目录:sudo ln -s /etc/nginx/sites-available/b.com /etc/nginx/sites-enabled/
  • 测试Nginx配置合法性:sudo nginx -t,没问题就重启Nginx:sudo systemctl reload nginx
  • 现在运行Certbot,要么交互式选择两个域名,要么直接用命令指定:
    sudo certbot --nginx -d a.com -d www.a.com -d b.com -d www.b.com
  • 证书生成后,你可以把b.com合并到a.com的配置里(比如把a.comserver_name改成server_name a.com www.a.com b.com www.b.com;),然后删掉b.com的单独配置,再重启Nginx即可。

方法2:使用webroot插件直接申请(无需修改Nginx配置)

如果不想折腾Nginx配置,用webroot插件更直接,它通过在网站根目录生成验证文件来完成域名所有权验证:

  • 先确认a.com的webroot目录(就是Nginx配置里root指令指定的路径,比如/var/www/a.com/var/www/html
  • 直接运行Certbot命令,指定两个域名和对应的webroot:
    sudo certbot certonly --webroot -w /var/www/a.com -d a.com -d www.a.com -d b.com -d www.b.com
    • -w后面是webroot路径,所有域名用同一个就行,因为它们指向同一个IP
  • 证书生成后,你需要手动修改Nginx配置:要么给b.com单独加HTTPS的server块,要么把b.com加到a.comserver_name里,然后配置ssl_certificatessl_certificate_key指向生成的证书文件(默认路径是/etc/letsencrypt/live/a.com/fullchain.pem/etc/letsencrypt/live/a.com/privkey.pem

注意事项

  • 确保b.com的DNS解析已经生效(指向同一个IP),不然Certbot验证会失败
  • 证书自动续期的话,两种方法Certbot都会自动处理:用Nginx插件的续期命令会自动更新配置,webroot方法的默认续期任务也能正常运行

内容的提问来源于stack exchange,提问作者JGStyle

火山引擎 最新活动