Docker Compose部署WordPress时Let's Encrypt证书申请失败求助
解决Let's Encrypt证书申请超时问题(AT&T网络环境)
核心排查与修复步骤
Let's Encrypt的HTTP-01认证要求公网能正常访问服务器的80端口,结合你使用AT&T网络的情况,按以下步骤排查:
1. 确认是否处于CGNAT环境
- 执行命令查看服务器公网IP:
对比这个IP和你域名DNS解析的IP,如果不一致,说明你的服务器没有独立公网IP(AT&T默认给很多用户分配CGNAT地址),Let's Encrypt无法通过公网访问你的80端口完成认证。curl ifconfig.me- 解决:联系AT&T申请静态公网IP,或者切换到DNS-01认证模式(不需要开放80/443,通过修改DNS TXT记录完成认证)。
2. 验证80端口的公网可达性
- 用非服务器所在网络的设备(比如手机开流量)执行:
如果连接失败,说明AT&T的路由器可能默认屏蔽了端口转发,需要登录路由器后台手动配置80/443端口转发到服务器的内网IP。telnet your-domain.com 80
3. 检查Certbot与Nginx的挂载配置
- 确保Docker Compose中Certbot的
webroot路径和Nginx的静态文件路径一致,比如:
同时Nginx配置里要包含对certbot: image: certbot/certbot volumes: - ./certbot/conf:/etc/letsencrypt - ./certbot/www:/var/www/certbot command: certonly --webroot -w /var/www/certbot --email your-email@example.com --agree-tos --no-eff-email -d your-domain.com.well-known/acme-challenge/路径的转发,指向这个webroot目录。
4. 用测试环境验证认证流程
- 改用Let's Encrypt测试环境(无严格速率限制)测试,修改Certbot命令加入
--test-cert参数:
如果测试环境能成功申请证书,说明问题出在生产环境的速率限制或临时网络波动;如果还是失败,继续排查网络出站问题。certbot certonly --webroot -w /var/www/certbot --test-cert --email your-email@example.com --agree-tos --no-eff-email -d your-domain.com
5. 检查服务器出站连接
- 验证服务器能否访问Let's Encrypt的API:
如果连接超时,说明AT&T可能屏蔽了该域名,修改服务器DNS为curl -v https://acme-v02.api.letsencrypt.org/directory8.8.8.8或1.1.1.1后重试。
内容的提问来源于stack exchange,提问作者DataStraine
相关产品推荐
相关产品推荐

