如何更换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_certificate和ssl_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




