← 返回首页
SSL

宝塔 http-01 验证 404:验证文件没写到站点根目录

症状:宝塔面板申请 Let's Encrypt 证书,永远报「验证失败 404」。域名解析正确、80 端口通、.well-known 目录也在,就是过不了。

定位

Let's Encrypt 的报错邮件里有验证 URL,拿它 curl 一下:

curl http://example.com/.well-known/acme-challenge/test

返回 404。再 nginx -T | grep example.com——搜不到任何配置。真相:这个"站点"在 nginx 里根本不存在,验证请求被别的 server 块接住了。

根因

面板创建站点的方式如果不是标准模板(比如通过插件 API 建的项目),conf 可能写到别的路径、甚至压根没 reload。而验证文件是按面板自己的逻辑放的,两边对不上。

修复

1. 确认 nginx 里有该域名的 server 块,且 root 指向真实目录:

nginx -T 2>/dev/null | grep -A5 "server_name.*example.com"

2. 手动验证:往 root/.well-known/acme-challenge/ 放个文件,外部 curl 能读到,这一步通了验证就通。

3. 面板申请还不行就绕开它,用 acme.sh 签(见 09-07 那篇教程)。

教训

面板说"创建成功"不等于配置真的生效。nginx -T 看一眼实际加载的配置,永远比猜快。