Cloudflare 实战:完美兼顾 Cloudflare Tunnel 与 Ads.txt 部署
本文内容较新
·
14天前更新
最后更新: 2026年02月16日
预计阅读时间: 7.9 分钟
1979 字
250 字/分
很多在使用 Cloudflare Tunnel 进行内网穿透的用户,在尝试为根域名(xxx.org)部署 Google Adsense 的 ads.txt 时,常会遇到子域名打不开、SSL 握手报错(PR_END_OF_FILE_ERROR)等问题。
本文记录了如何通过 Worker 自定义域 方案,在不干扰 Tunnel 的前提下优雅地解决这一冲突。
核心痛点:为什么不能直接改 DNS?
通常我们通过 CNAME 记录(如 dashy.xxx.org)访问内网服务。但 Google 要求 ads.txt 必须放在根域名下。
- 错误做法:手动添加一条指向内网 IP 或伪装 IP(如 1.1.1.1)的 A 记录。
- 后果:这会导致 Cloudflare 边缘证书冲突,造成全局子域名访问崩溃,或代理状态下的 HTTPS 握手失败。
第一阶段:清理环境(拨乱反正)
在开始新配置前,必须删除会导致冲突的旧记录:
- 进入 DNS 设置:登录 Cloudflare,选择你的域名,点击左侧 DNS -> 记录。
- 删除 A 记录:删除所有名称为
xxx.org(或@)的 A 记录。 - 删除残留路由:点击左侧 Workers 和 Pages -> 路由 (Routes),删除所有涉及
xxx.org/ads.txt的 HTTP 路由。 - 保留子域名:不要动那些指向
xxx.cfargotunnel.com的子域名 CNAME 记录。
第二阶段:使用 Worker 托管 Ads.txt
我们利用 Cloudflare Worker 拦截根域名的特定路径,而无需真实服务器。
1. 创建 Worker
- 点击左侧 Workers 和 Pages -> 概述 (Overview)。
- 点击 创建 (Create) -> 创建 Worker (Create Worker)。
- 命名为
ads-txt-handler,点击 部署 (Deploy)。
2. 编写逻辑代码
点击 编辑代码 (Edit Code),粘贴以下精准拦截逻辑:
export default {
async fetch(request) {
const url = new URL(request.url);
// 逻辑:只有当访问根域名的 /ads.txt 时才返回内容
if (url.pathname === '/ads.txt') {
const adsContent = `google.com, pub-xxxxxxxxxxxxxxxx, DIRECT, f08c47fec0942fa0`;
return new Response(adsContent, {
headers: { 'content-type': 'text/plain;charset=UTF-8' },
});
}
// 其他请求(如直接访问根域名)返回 404,确保不干扰子域名
return new Response('Not Found', { status: 404 });
}
};点击右上角 保存并部署。
第三阶段:绑定自定义域(解决 SSL 报错的关键)
这是最重要的一步! 避开手动 DNS 记录,让系统托管。
- 回到该 Worker 的主界面,点击 设置 (Settings) 选项卡。
- 点击左侧的 触发器 (Triggers)。
- 在 自定义域 (Custom Domains) 栏目中,点击 添加自定义域。
- 输入你的根域名:
xxx.org。 - 注意:如果报错“无法添加 DNS 记录”,请返回 DNS 页面确认是否删干净了名称为
@的 MX 或 TXT 记录(绑定成功后再加回来)。
第四阶段:SSL 与 代理软件适配
1. SSL 模式调整
进入 SSL/TLS -> 概述,将加密模式设置为 “完全 (Full)”。这能确保 Worker 与 Cloudflare 边缘节点之间的通信协议一致。
2. 排除代理干扰
如果你开启了代理(如 Clash)发现报错 PR_END_OF_FILE_ERROR:
- 原因:代理软件缓存了旧的解析连接。
解决:
- 彻底重启代理软件。
- 在代理控制面板点击 “Flush Sockets / 断开所有连接”。
- 尝试切换节点或开启“直连”模式验证。
成果验证
- Ads.txt:访问
https://xxx.org/ads.txt,应显示广告商信息。 - 子域名:访问
https://dashy.xxx.org,应正常穿透至内网,无 SSL 报错。 - Adsense 后台:配置完成后,Google 爬虫会在 24-48 小时内更新状态。
总结:在 Cloudflare 环境下,Worker 自定义域 是处理根域名静态文件(如 ads.txt, robots.txt)最稳定、最不干扰其他业务(如 Tunnel)的方案。
评论 加载中...