微信域名验证失败:使用 Nginx 配置返回验证文件内容
微信公众号或小程序接入时,常因服务器无 FTP 权限或前端路由拦截导致域名验证 txt 文件无法访问。解决方案是利用 Nginx 的 location 精确匹配配合 return 指令,直接返回验证字符串并设置 Content-Type 为 text/plain,无需创建物理文件。此方法同样适用于 Google Search Console 等其他域名验证场景。

微信公众号或小程序接入时,常因服务器无 FTP 权限或前端路由拦截导致域名验证 txt 文件无法访问。解决方案是利用 Nginx 的 location 精确匹配配合 return 指令,直接返回验证字符串并设置 Content-Type 为 text/plain,无需创建物理文件。此方法同样适用于 Google Search Console 等其他域名验证场景。

在接入微信公众号网页授权、JS-SDK 或小程序业务域名时,微信要求证明对域名的控制权。最常见的方式是:
请将以下内容保存为 txt 文件,上传至你的服务器
https://yourdomain.com/xxxxxx.txt,确保可公开访问。
但实际场景中常遇到以下问题:
/xxxxxx.txt 返回 HTML 而非纯文本;本文介绍使用 Nginx 一行配置快速部署微信要求的验证文件的方法。
这是典型的 HTTP-based Domain Ownership Verification(基于 HTTP 的域名所有权验证)机制:
https://yourdomain.com/MP_verify_xxxxxx.txt;abcdefghijklmnopqrstuvwxyz);Content-Type 为 text/plain;所以,关键不是'文件',而是'可公开访问的、返回纯文本的 URL'。
无需创建物理文件!利用 Nginx 的 location + return 指令,直接返回指定文本。
例如:
MP_verify_abc123def456.txtabcdefghijklmnopqrstuvwxyz编辑站点配置(如 /etc/nginx/sites-enabled/your-site.conf),在 server 块中加入:
# 微信公众号/小程序域名验证
location = /MP_verify_abc123def456.txt {
default_type text/plain;
return 200 "abcdefghijklmnopqrstuvwxyz";
}
说明:
location = /...:精确匹配该 URL,优先级最高;default_type text/plain:强制返回 Content-Type: text/plain;return 200 "内容":直接返回 HTTP 200 和指定字符串,无需磁盘文件。nginx -t && nginx -s reload
curl -i https://yourdomain.com/MP_verify_abc123def456.txt
应返回:
HTTP/2 200 content-type: text/plain ... abcdefghijklmnopqrstuvwxyz
完全符合微信要求。
location = /MP_verify_abc123def456.txt {
default_type text/plain;
return 200 "abcdefghijklmnopqrstuvwxyz";
}
location = /MP_verify_xyz789uvw012.txt {
default_type text/plain;
return 200 "zyxwvutsrqponmlkjihgfedcba";
}
location ~ ^/MP_verify_[a-zA-Z0-9]+\.txt$ {
alias /var/www/verify/;
default_type text/plain;
expires 1h;
}
然后将 .txt 文件放入 /var/www/verify/ 目录即可。
注意:确保文件权限可读,且 Web 服务器用户(如 www-data)有访问权限。
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 返回 404 | Nginx 未配置该路径 | 检查 location 是否精确匹配 |
| 返回 HTML 内容 | 前端路由拦截了 .txt 请求 | 将 Nginx 规则放在最前面,或使用 = 精确匹配 |
Content-Type: text/html | 未设置 default_type | 显式指定 default_type text/plain; |
| 微信提示'文件内容不匹配' | 多了空格/换行 | 用 return 200 "内容"; 避免文件末尾换行 |
.txt 文件;location = 精确匹配,不会被前端路由覆盖;提示:此方法同样适用于 Google Search Console、Baidu 验证、Apple App Site Association 等类似场景。
面对微信的域名验证要求,不要被'上传 txt 文件'字面意思限制。作为运维或开发者,应该用更高效、更可靠的方式解决问题。
通过 Nginx 的 return 指令,不仅完成了验证,还避免了文件管理的麻烦,提升了系统的整洁度和可维护性。
#!/bin/bash
DOMAIN="yourdomain.com"
FILE="MP_verify_abc123def456.txt"
EXPECTED="abcdefghijklmnopqrstuvwxyz"
CONTENT=$(curl -s "https://$DOMAIN/$FILE")
if [ "$CONTENT" = "$EXPECTED" ]; then
echo "验证通过"
else
echo "验证失败"
exit 1
fi

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online