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

如何更换Let's Encrypt Certbot关联域名?(Django+Nginx部署场景)

更换Django应用域名并配置新SSL证书(Nginx+Gunicorn环境)

你猜的没错,重新签发指定新域名的证书是核心步骤,但还有几个关键操作得同步做,不然可能会出现访问异常或者证书验证失败的问题。我一步步给你拆解清楚:

1. 先更新Nginx配置,适配新域名

之前的Nginx配置里全绑定的是旧域名aaa.com,得先把它换成bbb.com

  • 打开你的Nginx站点配置文件,一般在/etc/nginx/sites-available//etc/nginx/sites-enabled/目录下,比如/etc/nginx/sites-available/your-django-app
  • 把所有出现aaa.com的地方替换成bbb.com,包括server_name指令、SSL相关的ssl_certificatessl_certificate_key路径(先记下来,等新证书生成后要对应上)
  • 务必保留/.well-known/acme-challenge/的路由规则——这是Let's Encrypt验证域名所有权的关键,之前配置过的话,只要域名换了,路径不用改,保持类似如下配置即可:
    location /.well-known/acme-challenge/ {
        root /var/www/html; # 或者你之前指定的验证文件存放目录
        try_files $uri =404;
    }
    
  • 测试Nginx配置是否合法:sudo nginx -t,没问题的话重启Nginx:sudo systemctl restart nginx

2. 重新签发新域名的SSL证书

假设你之前用的是Certbot(最常用的Let's Encrypt工具),执行下面的命令:

  • 如果是首次给bbb.com签发证书:
    sudo certbot --nginx -d bbb.com -d www.bbb.com
    
    这里-d参数指定要签发证书的域名,包括主域名和www子域名(如果需要的话),--nginx参数会自动帮你更新Nginx配置里的SSL证书路径,省得手动修改。
  • 如果你之前已经有旧证书,只想替换成bbb.com的证书,直接用这个命令就行,Certbot会自动处理替换逻辑。

注意:执行命令前,一定要确保新域名bbb.com已经正确解析到这台DigitalOcean服务器的公网IP,不然Let's Encrypt的域名验证会直接失败。

3. 同步更新Django应用的配置

别漏掉这一步!Django里有几个和域名强相关的配置:

  • 打开settings.py,修改ALLOWED_HOSTS,把'bbb.com''www.bbb.com'加进去,同时删掉旧的aaa.com相关条目:
    ALLOWED_HOSTS = ['bbb.com', 'www.bbb.com', '你的服务器IP']
    
  • 检查应用里有没有硬编码旧域名的地方(比如邮件模板、静态资源链接、内部跳转地址),如果有,全部替换成bbb.com,避免出现链接失效的问题。
  • 重启Gunicorn服务,让配置生效:sudo systemctl restart gunicorn(如果你的Gunicorn服务名不是这个,根据实际情况调整)

4. 验证新证书和域名是否生效

  • 打开浏览器访问https://bbb.com,检查地址栏的锁形图标,确认证书有效,没有安全警告。
  • 测试应用的核心功能,比如页面加载、表单提交、用户登录等,确保没有因为域名变更导致的异常。

关于旧证书和.well-known目录的说明

  • 旧的aaa.com证书可以保留一段时间,也可以用sudo certbot delete --cert-name aaa.com删掉,节省服务器空间。
  • .well-known目录不用手动删除或修改,Certbot在验证新域名时会自动在里面生成新的验证文件,验证完成后会自动清理(就算保留也不会影响后续使用)。

总结一下:不是只重新签发证书就行,得同步更新Nginx配置、Django的ALLOWED_HOSTS和硬编码域名,最后重启服务验证,这样整个流程才会顺畅。

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

火山引擎 最新活动