微信域名验证失败:使用 Nginx 配置返回验证文件内容
在接入微信公众号网页授权、JS-SDK 或小程序业务域名时,微信要求证明对域名的控制权。最常见的方式是:
请将以下内容保存为 txt 文件,上传至你的服务器
https://yourdomain.com/xxxxxx.txt,确保可公开访问。
但实际场景中常遇到以下问题:
- 没有 FTP 权限;
- 前端是 SPA(如 Vue/React),所有路径由前端路由接管,
/xxxxxx.txt返回 HTML 而非纯文本; - 使用了 CDN 或对象存储,上传小文件很麻烦;
- 希望用最轻量、最可靠的方式完成验证。
本文介绍使用 Nginx 一行配置快速部署微信要求的验证文件的方法。
一、为什么微信要验证 .txt 文件?
这是典型的 HTTP-based Domain Ownership Verification(基于 HTTP 的域名所有权验证)机制:
- 微信服务器会访问
https://yourdomain.com/MP_verify_xxxxxx.txt; - 如果返回的内容完全匹配指定字符串(如
abcdefghijklmnopqrstuvwxyz); - 且
Content-Type为text/plain; - 则认为拥有该域名的控制权。
所以,关键不是'文件',而是'可公开访问的、返回纯文本的 URL'。
二、解决方案:用 Nginx 直接返回验证内容
无需创建物理文件!利用 Nginx 的 location + return 指令,直接返回指定文本。
Step 1:获取微信提供的验证内容
例如:
- 文件名:
MP_verify_abc123def456.txt - 内容:
abcdefghijklmnopqrstuvwxyz
Step 2:在 Nginx 配置中添加验证规则
编辑站点配置(如 /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 和指定字符串,无需磁盘文件。
Step 3:重载 Nginx
nginx -t && nginx -s reload
Step 4:验证是否生效
curl -i https://yourdomain.com/MP_verify_abc123def456.txt
应返回:
HTTP/2 200 content-type: text/plain ... abcdefghijklmnopqrstuvwxyz


