Google Compute Engine上Nginx配置Let's Encrypt SSL遇DNS问题求助
解决Nginx + Spring Boot的Let's Encrypt SSL配置问题
先处理核心DNS错误
- 修正域名与命令
你执行Certbot命令时写错了域名后缀(实际是.co.uk却用了.com),正确命令应为:
sudo certbot --nginx -d mydomain.co.uk -d www.mydomain.co.uk
同时确认Cloud DNS配置:
- 确保
mydomain.co.uk和www.mydomain.co.uk都添加了A/AAAA记录,指向新VM的静态IP - 用
dig mydomain.co.uk或nslookup www.mydomain.co.uk在本地/VM上验证解析结果,DNS记录生效通常需要5-15分钟(取决于TTL设置),刚更新完请先等待再重试。
- 旧acme挑战记录处理
之前测试用的CNAME类型acme挑战记录可留可删,不会影响当前HTTP-01挑战的验证流程,嫌冗余直接删除即可。
防火墙配置必须做
必须开放80和443端口:
- Let's Encrypt的HTTP-01挑战需要通过80端口完成域名归属验证
- HTTPS服务本身依赖443端口对外提供访问
在GCP控制台的VPC网络 > 防火墙中添加两条入站规则: - 允许所有来源访问TCP 80端口
- 允许所有来源访问TCP 443端口
证书申请失败的备选方案:DNS-01挑战
如果HTTP-01挑战因网络/防火墙限制始终失败,可改用DNS-01挑战(无需开放80端口):
- 安装Certbot的Google Cloud DNS插件:
sudo apt install python3-certbot-dns-google
- 创建Cloud DNS服务账号并下载密钥文件,给VM授予DNS编辑权限
- 执行证书申请命令:
sudo certbot certonly --dns-google --dns-google-credentials /path/to/your/key.json -d mydomain.co.uk -d www.mydomain.co.uk
该命令会自动添加TXT记录完成验证,证书生成后手动配置Nginx即可。
经济的开箱即用方案推荐
- GCP托管SSL证书 + 负载均衡器
GCP提供免费的Let's Encrypt托管证书,自动处理签发与续期:
- 配置Cloud Load Balancer,前端启用HTTPS监听并关联托管SSL证书
- 后端指向你的GCE VM(80端口)
- 负载均衡器有免费额度,超出后按流量计费,无需手动维护Certbot,适合长期稳定的应用。
- Nginx Proxy Manager
用Docker部署Nginx Proxy Manager,通过Web界面一键配置反向代理与SSL证书:
docker run -d -p 80:80 -p 443:443 -p 81:81 --name nginx-proxy-manager -v ./data:/data -v ./letsencrypt:/etc/letsencrypt jc21/nginx-proxy-manager:latest
部署后通过81端口访问管理界面,添加反向代理指向Spring Boot应用(VM的8080端口),随后一键申请SSL证书,操作简单,适合非运维背景用户。
内容的提问来源于stack exchange,提问作者Kris Swat
相关产品推荐
相关产品推荐

