Nginx下.well-known/acme-challenge路径访问404问题求助
解决Nginx下ACME验证文件404的问题
这问题我帮很多人排查过,核心是Nginx的location匹配顺序在搞鬼!
问题根源
Nginx对**正则表达式类型的location(~或~*)**是按配置里的出现顺序匹配的,第一个匹配上的location就会生效。你的配置里,location ~ /.well-known这个正则会先捕获所有包含.well-known的请求(自然也包括/.well-known/acme-challenge/file),但这个块里只有allow all,没告诉Nginx怎么找文件,导致它找不到你放的验证文件,直接返回404。而后面那个更具体的/\.well-known/acme-challenge/ location因为排得晚,根本没机会被用到。
另外提一句,第二个location里的root /var/www/html;和break;都是多余的——server块已经全局设置了root,try_files本身就会处理文件查找逻辑。
修复后的配置
调整location顺序,把更具体的ACME验证路径放在前面,同时清理冗余配置:
server { listen 80; server_name weburl.com; root /var/www/html; # 优先匹配ACME验证的专属路径 location ~ /\.well-known/acme-challenge/ { allow all; try_files $uri =404; } # 处理其他.well-known下的请求 location ~ ^/.well-known { allow all; } }
额外要检查的点
- 验证文件权限:确保Nginx运行用户(一般是
www-data)能读取该文件,建议文件权限设为644,目录权限设为755。 - 重启Nginx:执行
sudo systemctl restart nginx(对应你系统的重启命令)让配置生效。 - 再次访问
http://weburl.com/.well-known/acme-challenge/file确认正常访问。
内容的提问来源于stack exchange,提问作者Matey Johnson
相关产品推荐
相关产品推荐

