本文内容较新 · 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 握手失败。

第一阶段:清理环境(拨乱反正)

在开始新配置前,必须删除会导致冲突的旧记录:

  1. 进入 DNS 设置:登录 Cloudflare,选择你的域名,点击左侧 DNS -> 记录
  2. 删除 A 记录:删除所有名称为 xxx.org(或 @)的 A 记录
  3. 删除残留路由:点击左侧 Workers 和 Pages -> 路由 (Routes),删除所有涉及 xxx.org/ads.txt 的 HTTP 路由。
  4. 保留子域名:不要动那些指向 xxx.cfargotunnel.com 的子域名 CNAME 记录。

第二阶段:使用 Worker 托管 Ads.txt

我们利用 Cloudflare Worker 拦截根域名的特定路径,而无需真实服务器。

1. 创建 Worker

  1. 点击左侧 Workers 和 Pages -> 概述 (Overview)
  2. 点击 创建 (Create) -> 创建 Worker (Create Worker)
  3. 命名为 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 记录,让系统托管。

  1. 回到该 Worker 的主界面,点击 设置 (Settings) 选项卡。
  2. 点击左侧的 触发器 (Triggers)
  3. 自定义域 (Custom Domains) 栏目中,点击 添加自定义域
  4. 输入你的根域名:xxx.org
  5. 注意:如果报错“无法添加 DNS 记录”,请返回 DNS 页面确认是否删干净了名称为 @ 的 MX 或 TXT 记录(绑定成功后再加回来)。

第四阶段:SSL 与 代理软件适配

1. SSL 模式调整

进入 SSL/TLS -> 概述,将加密模式设置为 “完全 (Full)”。这能确保 Worker 与 Cloudflare 边缘节点之间的通信协议一致。

2. 排除代理干扰

如果你开启了代理(如 Clash)发现报错 PR_END_OF_FILE_ERROR

  • 原因:代理软件缓存了旧的解析连接。
  • 解决

    • 彻底重启代理软件。
    • 在代理控制面板点击 “Flush Sockets / 断开所有连接”
    • 尝试切换节点或开启“直连”模式验证。

成果验证

总结:在 Cloudflare 环境下,Worker 自定义域 是处理根域名静态文件(如 ads.txt, robots.txt)最稳定、最不干扰其他业务(如 Tunnel)的方案。