Nginx配置下Certbot ACME验证失败 如何排除.well-known路径HTTPS跳转
配置调整方案
问题根因
你当前的配置中return 301跳转规则属于80端口server块的全局规则,Nginx处理请求时即便匹配到了/.well-known/acme-challenge的location规则,依然会执行server层级的跳转逻辑,导致ACME验证的HTTP请求被重定向到HTTPS,而Let's Encrypt的验证请求不会跟随跳转,最终验证失败。
调整后的完整配置
server { listen [::]:80; listen 80; server_name testdomain.com www.testdomain.com; server_tokens off; location ~ /.well-known/acme-challenge { allow all; root /var/www/certbot; } # 仅非ACME挑战的请求触发HTTPS跳转 location / { return 301 https://www.testdomain.com$request_uri; } } #other server configs
验证生效步骤
- 配置修改完成后先执行
nginx -t检查语法是否正确,确认无报错后执行nginx -s reload重载配置生效 - 若使用docker compose部署,可直接在宿主机修改挂载的Nginx配置文件,之后执行
docker compose restart nginx重启容器即可 - 验证方式:手动在
/var/www/certbot/.well-known/acme-challenge/目录下创建测试文件,直接通过HTTP访问对应路径,确认不会跳转且能正常返回文件内容即可重新执行Certbot证书申请
内容的提问来源于stack exchange,提问作者Ivan Khorin
相关产品推荐
相关产品推荐

