WordPress站点Nginx下.well-known/acme-challenge返回404致SSL续期失败
问题原因
你遇到的404问题是由以下几个配置遗漏/冲突导致的:
- 重复定义了
.well-known路径的匹配规则,多余的正则匹配规则可能干扰优先级判断
你的配置里同时存在location ~ /.well-known和location ^~ /.well-known/acme-challenge/两个规则,虽然理论上^~前缀匹配优先级更高,但多余的规则完全可以删除避免冲突 .well-known/acme-challenge匹配块缺少显式的root声明和目录访问逻辑
虽然全局配置了root,但显式在acme挑战路径的location块里声明root可以避免继承异常,同时你当前的配置没有处理目录访问的回退逻辑- 路径匹配规则没有覆盖不带末尾斜杠的
/.well-known/acme-challenge请求
你当前的location ^~ /.well-known/acme-challenge/只匹配带末尾斜杠的路径前缀,不带斜杠的路径会落入location /的规则,被转发给WordPress处理返回自定义404
修复方案
你可以把现有两个和.well-known相关的location块删除,替换为如下配置:
location ^~ /.well-known/acme-challenge/ { root /var/www/wordpress; allow all; default_type "text/plain"; try_files $uri $uri/ =404; autoindex off; # 跳过所有缓存规则避免干扰 fastcgi_cache_bypass 1; fastcgi_no_cache 1; } # 处理不带斜杠的acme-challenge请求,自动重定向到带斜杠的路径 location = /.well-known/acme-challenge { return 301 /.well-known/acme-challenge/; }
如果使用Certbot的webroot模式续期,要确认续期命令里的--webroot-path参数值为/var/www/wordpress,和配置里的root保持一致。
额外检查项
修改配置重载nginx之前,先确认以下权限配置正确:
- 确认
/var/www/wordpress/.well-known/acme-challenge目录的所有者和nginx运行用户一致(通常是www-data),权限至少为755 - 确认目录下的文件权限至少为
644,nginx运行用户有可读权限 - 修改配置后执行
nginx -t验证配置无语法错误,再执行systemctl reload nginx重载配置生效
内容的提问来源于stack exchange,提问作者AMendis
相关产品推荐
相关产品推荐

