<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Polo</title><description>记录与分享</description><link>https://blog.drtob.com/</link><language>zh_CN</language><item><title>Claude Code+Cliproxy+CC Switch/ChatGpt无限使用</title><link>https://blog.drtob.com/posts/cc--cliproxy-ccs/</link><guid isPermaLink="true">https://blog.drtob.com/posts/cc--cliproxy-ccs/</guid><description>Cliproxy反代出api，通过CC Switch配置给Claude Code，形成Claude Code+ChatGpt的无限使用</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;声明&lt;/strong&gt;：本文仅供学习交流使用，请遵守各服务提供商的服务条款。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%89%8D%E8%A8%80&quot;&gt;前言&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#cliproxy-%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE&quot;&gt;Cliproxy 安装配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#cc-switch-%E5%AE%89%E8%A3%85&quot;&gt;CC Switch 安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%8E%A5%E5%85%A5Claude-Code&quot;&gt;接入Claude Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;Claude Code 是 Anthropic 官方提供的 AI 编程助手，功能强大，但免费版本有使用限制。而 ChatGPT 的 Codex 模型（在 OpenAI API 中）同样具备强大的代码能力，且有免费额度可以使用。&lt;/p&gt;
&lt;p&gt;本文将教你如何在 &lt;strong&gt;Windows 10&lt;/strong&gt; 系统上部署 &lt;strong&gt;Cliproxy&lt;/strong&gt; 和 &lt;strong&gt;CC Switch&lt;/strong&gt;，通过反代的方式将 Codex API 配置给 Claude Code 使用。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Cliproxy 安装配置&lt;/h2&gt;
&lt;p&gt;Cliproxy 是一个开源的 API 反向代理工具，支持将请求转发到 OpenAI API 兼容的后端。&lt;/p&gt;
&lt;h3&gt;下载解压&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;从 &lt;a href=&quot;https://github.com/router-for-me/CLIProxyAPI/releases&quot;&gt;CLIProxyAPI Releases&lt;/a&gt; 下载可执行文件，我这里是用win10演示，就下载windows版本。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;./cli-download.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;解压下载的压缩包&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;编辑配置&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;在解压目录下新建 &lt;code&gt;auths&lt;/code&gt; 文件夹，将 &lt;code&gt;config.example.yaml&lt;/code&gt; 重命名为 &lt;code&gt;config.yaml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;./edit-show.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用文本编辑器打开 &lt;code&gt;config.yaml&lt;/code&gt; ，仅需保留并修改以下基础配置项：&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;port: 8317

# 文件夹位置按你的实际情况填写
auth-dir: &quot;F:\\CLIProxyAPI\\auths&quot;

# 用关于登录WebUI的密码
secret-key: &quot;admin@1234&quot;

request-retry: 3

quota-exceeded:
  switch-project: true
  switch-preview-model: true

api-keys:
# Key请自行设置，用于客户端访问代理
- &quot;ABC-123456&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;有兴趣折腾的话，具体配置和教程可参考&lt;a href=&quot;https://help.router-for.me/cn/hands-on/tutorial-0.html&quot;&gt;官方文档&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;登录WebUI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;双击exe执行程序启动&lt;/li&gt;
&lt;li&gt;浏览器网站输入&lt;br /&gt;
&lt;a href=&quot;http://localhost:8317/management.html#/login&quot;&gt;http://localhost:8317/management.html#/login&lt;/a&gt;&lt;br /&gt;
或&lt;br /&gt;
&lt;a href=&quot;http://127.0.0.1:8317/management.html#/login&quot;&gt;http://127.0.0.1:8317/management.html#/login&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;管理密钥输入前面配置文件填写的 &lt;code&gt;secret-key&lt;/code&gt;,比如&lt;code&gt;admin@1234&lt;/code&gt;,进行登录&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;./login.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;代理配置&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;本地部署cliproxy，因为后面要用到codex auth认证，需要先修改代理配置，将&lt;code&gt;代理URL&lt;/code&gt;修改为本地魔法的端口地址&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;./proxy.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;OAuth认证&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;打开链接进行Codex OAuth登陆认证，按正常登陆Chatgpt的账号操作即可&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;./codex-login.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;认证成功后，可以在&lt;code&gt;认证文件&lt;/code&gt;页面查看并管理，生成的认证json文件也会保存在前面配置的本地&lt;code&gt;auths&lt;/code&gt;路径，若已有多个账号的认证json，也可以在这里上传导入&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;./auths.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 建议：批量注册账号组成号池，效果更佳&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;CC Switch 安装&lt;/h2&gt;
&lt;p&gt;CC Switch 是 Claude Code 的配置管理工具，支持快速切换 API 端点。&lt;/p&gt;
&lt;h3&gt;安装方式&lt;/h3&gt;
&lt;p&gt;从 &lt;a href=&quot;https://github.com/farion1231/cc-switch/releases&quot;&gt;CC Switch Releases&lt;/a&gt; 下载 Windows 可执行文件，进行安装即可。&lt;/p&gt;
&lt;h2&gt;接入Claude Code&lt;/h2&gt;
&lt;p&gt;利用CC Switch将反代的api接入Claude Code，达成Claude Code+Chatgpt模型的组合使用&lt;/p&gt;
&lt;h3&gt;CC Switch配置&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;打开CC Switch程序，选择Claude Code，点击&lt;code&gt;+&lt;/code&gt;，添加新供应商&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;./ccs-add.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;按图中配置填写配置&lt;br /&gt;
&lt;code&gt;预设供应商&lt;/code&gt;：自定义配置&lt;br /&gt;
&lt;code&gt;供应商名称&lt;/code&gt;：随便填&lt;br /&gt;
&lt;code&gt;API Key&lt;/code&gt;:前面config.yaml配置文件里的&lt;code&gt;api-keys&lt;/code&gt;，比如示例中的&lt;code&gt;ABC-123456&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;请求地址&lt;/code&gt;:&lt;code&gt;http://localhost:8317&lt;/code&gt;或&lt;code&gt;http://127.0.0.1:8317&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;API 格式&lt;/code&gt;:按自己需求填写，也可与图中一样&lt;br /&gt;
&lt;code&gt;认证字段&lt;/code&gt;:按自己需求填写，也可与图中一样&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;./ccs-config1.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;模型按自己需要的填写，在Cliproxy的WebUI中可以看到支持的认证模型&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;./models.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;模型后面可以添加(minimal/medium/high/xhigh)，表示不同的推理程度&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;./ccs-models.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;保存配置后进行启用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;./ccs-start.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Claude Code+Chatgpt验证&lt;/h3&gt;
&lt;p&gt;现在可以愉快的在Claude Code使用Chatgpt系列大模型了&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;以VScode中的Claude Code为例&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;./test.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
</content:encoded></item><item><title>Cloudflare Workers / Pages / R2 IP 优选指南</title><link>https://blog.drtob.com/posts/cloudflare-ip-optimization/</link><guid isPermaLink="true">https://blog.drtob.com/posts/cloudflare-ip-optimization/</guid><description>使用Worker 以及各种方法对 Cloudflare Workers、Pages、R2 进行 IP 优选，提高网站可用性和访问速度</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Cloudflare 作为全球领先的 CDN 和边缘计算平台，在全球拥有超过 300 个数据中心。但由于网络路由、运营商策略等因素，用户默认分配到的节点可能并非最优。本文将详细介绍如何对 &lt;strong&gt;Cloudflare Workers&lt;/strong&gt;、&lt;strong&gt;Cloudflare Pages&lt;/strong&gt; 和 &lt;strong&gt;Cloudflare R2&lt;/strong&gt; 进行 IP 优选，提升国内访问速度！&lt;/p&gt;
&lt;h2&gt;目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%8E%9F%E7%90%86%E6%A6%82%E8%BF%B0&quot;&gt;原理概述&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%85%AC%E5%85%B1%E4%BC%98%E9%80%89%E5%9F%9F%E5%90%8Dip&quot;&gt;公共优选域名/IP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#pages-%E4%BC%98%E9%80%89%E5%9F%9F%E5%90%8D&quot;&gt;Pages 优选域名&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#workers-%E4%BC%98%E9%80%89%E5%9F%9F%E5%90%8D&quot;&gt;Workers 优选域名&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#r2-%E7%9A%84-ip-%E4%BC%98%E9%80%89&quot;&gt;R2 的 IP 优选&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;原理概述&lt;/h2&gt;
&lt;h3&gt;什么是 IP 优选？&lt;/h3&gt;
&lt;p&gt;IP 优选是通过测试 Cloudflare 不同数据中心的 IP 地址，找到对当前网络环境延迟最低、速度最快的节点，然后通过修改 DNS 或 Hosts 的方式将域名解析到该 IP，从而实现加速访问。&lt;/p&gt;
&lt;h3&gt;为什么要做 IP 优选？&lt;/h3&gt;
&lt;p&gt;Cloudflare 使用 &lt;strong&gt;Anycast&lt;/strong&gt; 技术，同一个 IP 地址在全球多个数据中心同时广播。理论上用户会自动连接到最近的节点，但实际中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;运营商路由策略可能导致绕路&lt;/li&gt;
&lt;li&gt;国际出口拥塞影响访问质量&lt;/li&gt;
&lt;li&gt;部分地区运营商对特定 IP 段有优化&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通过 IP 优选，我们可以绕过这些限制，直接连接到最优节点。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;公共优选域名/IP&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;社区优选域名：https://cf.090227.xyz/ ，进入地址挑选延迟较低域名即可&lt;/li&gt;
&lt;li&gt;优选IP：https://github.com/XIU2/CloudflareSpeedTest ，使用大佬的工具测试出合适的IP&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;Pages 优选域名&lt;/h2&gt;
&lt;h3&gt;使用 DNSPod 进行优选（推荐）&lt;/h3&gt;
&lt;h4&gt;1. 在 Pages 中添加自定义域&lt;/h4&gt;
&lt;p&gt;进入 Cloudflare Pages 控制台：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;选择你的 Pages 项目&lt;/li&gt;
&lt;li&gt;点击 &lt;strong&gt;设置&lt;/strong&gt; → &lt;strong&gt;自定义域&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;点击 &lt;strong&gt;设置自定义域&lt;/strong&gt;，输入你的域名（如 &lt;code&gt;page.yourdomain.com&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;等待自定义域验证成功（状态显示为 &lt;strong&gt;活动&lt;/strong&gt;）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;./pages-domain.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;2. 在 DNSPod 中添加域名&lt;/h4&gt;
&lt;p&gt;登录 &lt;a href=&quot;https://console.dnspod.cn/&quot;&gt;DNSPod&lt;/a&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;点击 &lt;strong&gt;添加域名&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;输入你在 Pages 中添加的自定义域名&lt;/li&gt;
&lt;li&gt;点击 &lt;strong&gt;确定&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;复制&lt;strong&gt;主机记录&lt;/strong&gt;、&lt;strong&gt;记录值&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;./dnspod-add-domain.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;3. 在 Cloudflare 添加 TXT 验证记录&lt;/h4&gt;
&lt;p&gt;由于域名托管在 Cloudflare，需要返回cloudflare，为 Pages 的自定义域名添加一条TXT验证记录，使用上面复制的&lt;strong&gt;主机记录&lt;/strong&gt;、&lt;strong&gt;记录值&lt;/strong&gt;即可：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./dnspodcheck.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;4. 在 DNSPod 中验证域名&lt;/h4&gt;
&lt;p&gt;返回 DNSPod：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;点击 &lt;strong&gt;验证&lt;/strong&gt;，选择 &lt;strong&gt;手动验证&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;等待验证通过&lt;/li&gt;
&lt;li&gt;点击 &lt;strong&gt;立即激活&lt;/strong&gt; 开启解析，提示为域名设置NS记录，复制两条NS记录&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;5. 在 Cloudflare 添加 NS 记录&lt;/h4&gt;
&lt;p&gt;回到 Cloudflare DNS 管理：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;添加复制的 NS 记录，将自定义域名指向 DNSPod&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;./add-ns.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;6. 在 DNSPod 添加优选记录&lt;/h4&gt;
&lt;p&gt;进入 DNSPod 的解析记录页面：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用优选域名 添加CNAME记录（推荐）&lt;/li&gt;
&lt;li&gt;使用优选 IP 添加A记录&lt;/li&gt;
&lt;li&gt;建议添加3条线路，默认、国内指向优选域名/IP，境外指向pages默认分配的域名&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;./dnspod-ip.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;提示&lt;/strong&gt;：使用优选域名的好处是，当 IP 失效时，域名维护者会更新记录，你不需要手动修改。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;Workers 优选域名&lt;/h2&gt;
&lt;p&gt;Workers 的优选相对简单，使用 &lt;strong&gt;Workers 路由&lt;/strong&gt; 功能即可。&lt;/p&gt;
&lt;h3&gt;使用Workers路由匹配&lt;/h3&gt;
&lt;h4&gt;1. 在 Cloudflare DNS 添加 CNAME 记录&lt;/h4&gt;
&lt;p&gt;进入 Cloudflare DNS 管理，添加记录将自定义域名(work.youdomian.com)指向优选域名：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th&gt;目标&lt;/th&gt;
&lt;th&gt;代理状态&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CNAME&lt;/td&gt;
&lt;td&gt;worker&lt;/td&gt;
&lt;td&gt;cf.090227.xyz&lt;/td&gt;
&lt;td&gt;已禁用（灰色云）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;关键&lt;/strong&gt;：&lt;strong&gt;代理状态必须关闭&lt;/strong&gt;（灰色云），否则无法实现 IP 优选！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;2. 添加 Workers 路由&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;进入 Cloudflare 控制台 → &lt;strong&gt;Workers 和 Pages&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;进入 要配置的&lt;strong&gt;Workers&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;点击 &lt;strong&gt;添加路由&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;./worker-router.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;路由配置：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;路由&lt;/strong&gt;：&lt;code&gt;worker.yourdomain.com/*&lt;/code&gt; （注意加上 &lt;code&gt;/*&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;./add-router.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;3. 验证访问&lt;/h4&gt;
&lt;p&gt;等待 DNS 生效后，访问 &lt;code&gt;worker.yourdomain.com&lt;/code&gt;，如果正常返回 Worker 内容，说明配置成功。&lt;/p&gt;
&lt;h4&gt;4.Workers 路由匹配规则&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;路由示例&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;example.com/*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;匹配所有路径&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;*.example.com/*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;匹配所有子域名&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;example.com/api/*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;仅匹配 &lt;code&gt;/api/&lt;/code&gt; 路径&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;R2 的 IP 优选&lt;/h2&gt;
&lt;h3&gt;使用Cloud Connector配置&lt;/h3&gt;
&lt;p&gt;⚠️ &lt;strong&gt;这个方案参考网上大佬的，我没成功，我使用的下面另一种方案：Workers代理加速&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;1. 创建 R2桶 并绑定自定义域名&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./r2-domain.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;2. 进入规则 - Cloud Connector - Cloudflare R2&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./choose-r2.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;3. 选择R2桶以及自定义的域名&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./ch-r2.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;4. 给R2桶域名配置CAME指向优选域名&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./r2-cname.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;使用Workers代理加速&lt;/h3&gt;
&lt;p&gt;本质是通过Workers+优选IP加速访问&lt;/p&gt;
&lt;h4&gt;1. 配置代理域名指向优选域名/IP&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./proxy-domain.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;2. 新建worker，写入代码后部署，用于代理&lt;/h4&gt;
&lt;p&gt;代码可根据实际情况修改，通过worker域名加速访问节点后，再去构造R2桶域名请求，由于已经完成加速，后续请求都是在CF内网完成，速度极快&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const R2_DOMAIN = &apos;twikoo.r2.novoai.top&apos;; //改成你的R2桶域名
const ALLOWED_DOMAINS = [&apos;blog.novoai.top&apos;, &apos;www.blog.novoai.top&apos;]; // 允许的域名列表

async function handleRequest(request) {
  try {
    const url = new URL(request.url);
    
    // ===== 防盗链检查开始 =====
    const referer = request.headers.get(&apos;Referer&apos;) || &apos;&apos;;
    
    // 如果不是直接访问（有Referer），检查是否来自允许的域名
    // 注意：如果是直接访问图片 (无Referer)，通常也允许，或者你可以选择禁止
    if (referer !== &apos;&apos;) {
      let isAllowed = false;
      for (const domain of ALLOWED_DOMAINS) {
        if (referer.includes(domain)) {
          isAllowed = true;
          break;
        }
      }
      
      if (!isAllowed) {
        return new Response(&apos;Hotlinking not allowed&apos;, { 
          status: 403,
          headers: { &apos;Content-Type&apos;: &apos;text/plain&apos; }
        });
      }
    }
    
    // ===== 构造 R2 请求 =====
    const targetUrl = new URL(`https://${R2_DOMAIN}`);
    targetUrl.pathname = url.pathname;
    targetUrl.search = url.search;

    // 复制请求头，但修改 Host
    const headers = new Headers(request.headers);
    headers.set(&apos;Host&apos;, R2_DOMAIN);
    
    // 移除一些可能引起问题的跳板头
    headers.delete(&apos;cf-connecting-ip&apos;); 
    headers.delete(&apos;x-forwarded-for&apos;);

    const newRequest = new Request(targetUrl, {
      method: request.method,
      headers: headers,
    });
    
    // ===== 发起请求并处理缓存 =====
    let response = await fetch(newRequest);
    
    // 如果请求成功 (200)，添加缓存头，让 CF 边缘节点缓存图片
    if (response.status === 200) {
      // 克隆响应对象以便修改头
      const newResponse = new Response(response.body, response);
      
      // 设置浏览器缓存 (1年)
      newResponse.headers.set(&quot;Cache-Control&quot;, &quot;public, max-age=31536000, immutable&quot;);
      
      // 设置 CF 边缘缓存 (1年) - 关键！这样后续请求直接由 CF 返回，不运行 Worker
      newResponse.headers.set(&quot;CDN-Cache-Control&quot;, &quot;public, max-age=31536000&quot;);
      
      // 确保内容类型正确
      if (!newResponse.headers.has(&quot;Content-Type&quot;)) {
         // 如果 R2 没返回 Content-Type，可以根据后缀简单判断，或者依赖 R2 的元数据
         // 这里假设 R2 已经存好了 Content-Type
      }
      
      return newResponse;
    }
    
    return response;
    
  } catch (err) {
    return new Response(err.stack, { status: 500 });
  }
}

addEventListener(&apos;fetch&apos;, event =&amp;gt; {
  event.respondWith(handleRequest(event.request));
});
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3. 添加worker路由，完成worker和优选域名/IP的绑定&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./proxy-router.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;4. 图片访问测速&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;原R2桶域名访问图片延迟200ms&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;https://twikoo.r2.novoai.top/2026/03/0a81d686ef428d9bcb02d2c477b0822b.webp&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;使用worker加速后的代理域名访问同一图片延迟50ms&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;https://proxy.novoai.top/2026/03/0a81d686ef428d9bcb02d2c477b0822b.webp&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
</content:encoded></item><item><title>Twikoo评论系统配置Resend评论邮件通知</title><link>https://blog.drtob.com/posts/twikoo-resend/</link><guid isPermaLink="true">https://blog.drtob.com/posts/twikoo-resend/</guid><pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;关于 Resend&lt;/h2&gt;
&lt;p&gt;Resend 是一款面向开发者的邮件发送服务（API-first），主打简单集成、高送达率和对无服务器环境的良好支持。常见用途包括注册/验证邮件、重置密码、订单与交易通知、系统告警，以及站点/应用内通知（例如评论邮件提醒），免费额度充足（每天 100 封，对于我个人博客的评论邮件通知完全够用）。&lt;/p&gt;
&lt;p&gt;本文将重点介绍：注册 Resend、配置发件域名、生成 API Key、发送测试，以及如何将 Resend 配置到 Twikoo 实现评论邮件通知。&lt;/p&gt;
&lt;h2&gt;一. 注册与初始配置&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;注册账号：访问 https://resend.com/ ，使用邮箱/GitHub/Google登录并完成邮箱验证。免费额度适合轻量通知场景（文档以官网为准）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;登录后进入 &lt;code&gt;Domains&lt;/code&gt; -&amp;gt; &lt;code&gt;Add domain&lt;/code&gt;，建议使用子域名（例如 &lt;code&gt;mail.yourdomain.com&lt;/code&gt; 或 &lt;code&gt;news.yourdomain.com&lt;/code&gt;），与网站主域分离更安全。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Resend 会给出若干 DNS 记录（通常是 SPF 的 TXT、_domainkey 的 CNAME、以及可选的 DMARC TXT），在 Cloudflare 托管的主域名下把这些记录手工添加，或使用 Resend 的 Cloudflare 授权一键添加功能。
&lt;img src=&quot;./resend_dns.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;等待 DNS 生效（几分钟到数小时），回到 Resend 控制台点击 &lt;code&gt;Verify domain&lt;/code&gt;，显示 &lt;code&gt;Verified&lt;/code&gt; 即可在该域名下发信。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 &lt;code&gt;API Keys&lt;/code&gt; 页面创建 API Key（例如命名为 &lt;code&gt;twikoo-prod&lt;/code&gt;），生成后请立即复制并存放在安全处（只显示一次）。
&lt;img src=&quot;./resend_token.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;二. 发送方式与测试&lt;/h2&gt;
&lt;p&gt;推荐在后端或 Serverless 环境使用官方 SDK 或 HTTP API 发送邮件，避免在浏览器端暴露 API Key。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Node（官方 SDK）示例：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;npm install resend
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;import Resend from &apos;resend&apos;;
const resend = new Resend(process.env.RESEND_API_KEY);

await resend.emails.send({
  from: &apos;Site Name &amp;lt;no-reply@mail.yourdomain.com&amp;gt;&apos;,
  to: &apos;you@example.com&apos;,
  subject: &apos;测试邮件 — Resend&apos;,
  html: &apos;&amp;lt;p&amp;gt;发送成功&amp;lt;/p&amp;gt;&apos;,
});
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;HTTP API（curl）示例：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;curl -X POST https://api.resend.com/emails \
  -H &quot;Authorization: Bearer $RESEND_API_KEY&quot; \
  -H &quot;Content-Type: application/json&quot; \
  -d &apos;{&quot;from&quot;:&quot;no-reply@mail.yourdomain.com&quot;,&quot;to&quot;:&quot;you@example.com&quot;,&quot;subject&quot;:&quot;测试&quot;,&quot;html&quot;:&quot;&amp;lt;p&amp;gt;hi&amp;lt;/p&amp;gt;&quot;}&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;可选：Resend 支持 SMTP（smtp.resend.com），便于兼容传统客户端或系统。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;验证发送结果：登录 Resend 控制台 &lt;code&gt;Emails&lt;/code&gt; 页面查看发送状态（Sent/Delivered/Bounced）并排查问题。&lt;/p&gt;
&lt;h2&gt;三. 在 Twikoo 中配置评论邮件通知&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;进入Twikoo评论管理后台，点击配置管理-邮件通知。
&lt;img src=&quot;./twikoo_mailnotice.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;填写SENDER_EMAIL、SMTP_SERVICE、SMTP_PASS参数，其他留空后保存，评论即可收到邮件通知。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SENDER_EMAIL&lt;/code&gt;：任意名+Resend添加域名（例如 &lt;code&gt;novo@mail.novoai.top&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SMTP_SERVICE&lt;/code&gt;：resend&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SMTP_PASS&lt;/code&gt;：Resend生成的API Key（例如 &lt;code&gt;resend_prod_xxx&lt;/code&gt;）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在通用页面中配置BLOGGER_EMAIL用于接受评论邮件通知。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;带有图片的评论邮件通知可能会被识别为垃圾邮件，导致被过滤，可以在邮件接收方添加发件人到白名单。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>博客添加Twikoo评论系统-cloudflare部署</title><link>https://blog.drtob.com/posts/twikoo-cloudflare/</link><guid isPermaLink="true">https://blog.drtob.com/posts/twikoo-cloudflare/</guid><description>利用cloudflare部署Twikoo评论系统，为自己的博客添加评论交互</description><pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;简介&lt;/h2&gt;
&lt;p&gt;Twikoo 是一个轻量且美观的评论系统，本文介绍基于 Cloudflare 的部署方案（使用 Worker + D1 + R2）。优点是：不需要额外托管服务器、在国内访问稳定，并且和 Cloudflare 的存储/函数安全集成。&lt;/p&gt;
&lt;p&gt;本文适用场景：你已有一个支持接入Twikoo功能的静态博客，如Mizuki，并拥有 Cloudflare 帐号；拥有自定义域名(可选)以绑定 Twikoo 服务。&lt;/p&gt;
&lt;h2&gt;一、准备工作&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;GitHub 账号（用于 Fork/托管 twikoo-cloudflare 源码）&lt;/li&gt;
&lt;li&gt;Cloudflare 账号（用于创建 D1、R2、Workers、Turnstile）&lt;/li&gt;
&lt;li&gt;可选：一个域名（用于绑定 R2 或 Worker 的自定义域）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;二、Fork 并初始化仓库&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;访问仓库并 Fork：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;仓库地址：https://github.com/Aholicoco/twikoo-cloudflare&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;仓库中包含 &lt;code&gt;wrangler.toml&lt;/code&gt;、&lt;code&gt;schema.sql&lt;/code&gt; 等文件。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;三、在 Cloudflare 上创建 D1（数据库）&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;登录 Cloudflare 控制面板：&lt;code&gt;存储和数据库&lt;/code&gt; -&amp;gt; &lt;code&gt;D1 SQL 数据库&lt;/code&gt; -&amp;gt; &lt;code&gt;创建&lt;/code&gt;，命名为 &lt;code&gt;twikoo&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;创建完成后进入该数据库的 &lt;code&gt;Explore Data&lt;/code&gt; 页面，复制仓库根目录 &lt;code&gt;schema.sql&lt;/code&gt; 的内容到查询界面并执行 &lt;code&gt;Run all statement&lt;/code&gt;（创建所需表结构）。
&lt;img src=&quot;./Sql_query.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/li&gt;
&lt;li&gt;在数据库列表页复制该数据库的 &lt;code&gt;ID&lt;/code&gt;（随后替换仓库根目录 &lt;code&gt;wrangler.toml&lt;/code&gt; 中的 &lt;code&gt;database_id&lt;/code&gt;）。
&lt;img src=&quot;./D1_id.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在 &lt;code&gt;wrangler.toml&lt;/code&gt; 中的示例段落（请替换为你自己的 ID）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[[d1_databases]]
binding = &quot;DB&quot;
database_name = &quot;twikoo&quot;
database_id = &quot;f47ac10b-58cc-4372-a567-0e02b2c3d479&quot; # 替换为你的 D1 ID
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;四、创建 R2 存储（用于图片等附件）&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Cloudflare 左侧栏选择 &lt;code&gt;R2 对象存储&lt;/code&gt;，创建存储桶名 &lt;code&gt;twikoo&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;进入该存储桶的 &lt;code&gt;设置&lt;/code&gt; -&amp;gt; &lt;code&gt;自定义域&lt;/code&gt;，配置一个子域（例如 &lt;code&gt;twikoo.r2.yourdomain.com&lt;/code&gt;），等待激活。
&lt;img src=&quot;./R2_domain.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/li&gt;
&lt;li&gt;在 &lt;code&gt;wrangler.toml&lt;/code&gt; 中加入或修改变量：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;[vars]
R2_PUBLIC_URL = &quot;https://twikoo.r2.yourdomain.com&quot; # 替换为你设置的域名或 R2 公共 URL
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;（如果不使用自定义域，也可以暂时使用 R2 的默认访问地址，但建议绑定自有域名以避免跨源或访问限制）&lt;/p&gt;
&lt;h2&gt;五、部署 Worker（Twikoo 云函数）&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;在 Cloudflare 控制台中进入 &lt;code&gt;Workers 和 Pages&lt;/code&gt; -&amp;gt; &lt;code&gt;创建 Worker&lt;/code&gt;，并连接你 Fork 的仓库。&lt;/li&gt;
&lt;li&gt;在连接仓库时，选择 &lt;code&gt;main&lt;/code&gt;（或你使用的分支），构建/部署命令填写：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;npx wrangler deploy --minify
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;部署成功后访问 Worker 的 URL（或你后续绑定的自定义域），应看到类似：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;{
	&quot;code&quot;: 100,
	&quot;message&quot;: &quot;Twikoo 云函数运行正常，请参考 https://twikoo.js.org/frontend.html 完成前端的配置&quot;,
	&quot;version&quot;: &quot;x.x.x&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;六、将 Worker 绑定自定义域（可选，但建议）&lt;/h2&gt;
&lt;p&gt;在 &lt;code&gt;Workers 和 Pages&lt;/code&gt; 的 &lt;code&gt;域和路由&lt;/code&gt; 中添加自定义域，例如 &lt;code&gt;twikoo.yourdomain.com&lt;/code&gt;，完成后你的 Twikoo 服务将通过该域名对外提供 API 与文件托管，我这里选择添加路由。
&lt;img src=&quot;./Add_router.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;七、在博客中启用 Twikoo（前端配置）&lt;/h2&gt;
&lt;p&gt;Mizuki 已内置 Twikoo 支持，修改站点配置即可启用（不同博客站点的配置文件不一样，自己找一下）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;打开 &lt;code&gt;src/config.ts&lt;/code&gt;，找到 &lt;code&gt;commentConfig.twikoo.envId&lt;/code&gt;，将其替换为你部署并绑定的 Twikoo 域名（包含协议），设置 &lt;code&gt;commentConfig.enable&lt;/code&gt; 为 &lt;code&gt;true&lt;/code&gt; 表示启用评论，示例：&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;export const commentConfig: CommentConfig = {
	enable: true,
	twikoo: {
		envId: &quot;https://twikoo.yourdomain.com&quot;,
		lang: SITE_LANG,
	},
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;保存后重新构建/部署你的静态博客站点（例如 GitHub Pages / Cloudflare Pages），刷新博客文章页面底部，应能看到 Twikoo 评论区。
&lt;img src=&quot;./Comment.webp&quot; alt=&quot;配图&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;八、配置 Twikoo 管理面板（首次访问）&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;点击评论区的小齿轮图标，首次进入会要求设置管理员密码。&lt;/li&gt;
&lt;li&gt;进入 &lt;code&gt;配置管理&lt;/code&gt;：
&lt;ul&gt;
&lt;li&gt;在 &lt;code&gt;隐私&lt;/code&gt; 中将 &lt;code&gt;IMAGE_CDN&lt;/code&gt; 设置为 &lt;code&gt;cloudflare&lt;/code&gt;，启用图片上传到 R2。&lt;/li&gt;
&lt;li&gt;在 &lt;code&gt;通用&lt;/code&gt; 中为 &lt;code&gt;HIDE_ADMIN_CRYPT&lt;/code&gt; 设置暗号，隐藏管理入口。&lt;/li&gt;
&lt;li&gt;其他功能可自行摸索，保存配置后退出管理面板，就可以开始发表文字、图片进行评论了。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item></channel></rss>