<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Birdjiujiuuu の 小窝</title><description>喜欢您来喵~</description><link>https://birdjiujiuuu.pages.dev/</link><language>zh_CN</language><item><title>使用边缘节点加速你的网站优化国内用户体验</title><link>https://birdjiujiuuu.pages.dev/posts/20261031/</link><guid isPermaLink="true">https://birdjiujiuuu.pages.dev/posts/20261031/</guid><description>使用阿里云 ESA 免费版加速 GitHub Pages 主站与 Cloudflare Pages 图床，并解决配置过程中遇到的问题。</description><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;在搭建个人博客和图床时，为了兼顾免费与稳定，我们通常会选择 GitHub Pages 或 Cloudflare Pages 作为源站托管服务。然而，由于跨境网络路由的波动，国内用户访问这些海外节点的速度往往很一般。&lt;/p&gt;
&lt;p&gt;为了解决这个问题，我们可以使用 &lt;strong&gt;边缘安全加速&lt;/strong&gt; ，以此来提高国内用户的访问速度。&lt;/p&gt;
&lt;h2&gt;架构说明&lt;/h2&gt;
&lt;p&gt;为了便于说明，本文使用以下域名代称，加速服务使用 阿里云 ESA 免费版：&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;根域名&lt;/td&gt;
&lt;td&gt;&lt;code&gt;example.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;主站地址&lt;/td&gt;
&lt;td&gt;&lt;code&gt;www.example.com&lt;/code&gt;（源站：GitHub Pages &lt;code&gt;username.github.io&lt;/code&gt;）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;图床地址&lt;/td&gt;
&lt;td&gt;&lt;code&gt;imgs.example.com&lt;/code&gt;（源站：Cloudflare Pages &lt;code&gt;project.pages.dev&lt;/code&gt;）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;前置准备&lt;/h2&gt;
&lt;p&gt;无论是加速博客主站，还是加速图床，下面几步都是共通的，这是接入 ESA 的基础。&lt;/p&gt;
&lt;h3&gt;添加站点与验证&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;在阿里云 ESA 控制台添加站点 &lt;code&gt;example.com&lt;/code&gt;，选择 &lt;strong&gt;CNAME 接入&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;::: important 关于获得加速与保护的区域&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;全球（不包含中国内地）：适合未备案的域名，但是实际加速效果有限。&lt;/li&gt;
&lt;li&gt;全球：适合备案的域名，加速效果显著。
:::&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;添加完成后，系统要求验证域名所有权。在域名托管平台的 &lt;code&gt;Advanced DNS&lt;/code&gt; 添加一条 &lt;code&gt;TXT Record&lt;/code&gt;，主机记录为 &lt;code&gt;_esaauth&lt;/code&gt;，值填 ESA 提供的字符串。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;::: note 注意
&lt;code&gt;_esaauth&lt;/code&gt; 验证成功后&lt;strong&gt;请务必保留&lt;/strong&gt;，这是后续证书自动续期的凭证。
:::&lt;/p&gt;
&lt;h3&gt;添加 DNS 记录（ESA 侧）&lt;/h3&gt;
&lt;p&gt;在阿里云 ESA 控制台的站点管理中，进入 &lt;strong&gt;DNS&lt;/strong&gt; → &lt;strong&gt;记录&lt;/strong&gt; 页面：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;添加一条指向博客源站的记录：主机记录填 &lt;code&gt;www&lt;/code&gt;，记录类型选 &lt;code&gt;CNAME&lt;/code&gt;，记录值填 &lt;code&gt;username.github.io&lt;/code&gt;，并&lt;strong&gt;开启代理加速&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;如果需要图床，再添加一条：主机记录填 &lt;code&gt;imgs&lt;/code&gt;，记录类型选 &lt;code&gt;CNAME&lt;/code&gt;，记录值填 &lt;code&gt;project.pages.dev&lt;/code&gt;，同样&lt;strong&gt;开启代理加速&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;修改 DNS 解析（域名托管平台侧）&lt;/h3&gt;
&lt;p&gt;在域名托管平台的后台，清理掉原来指向 GitHub IP 的所有 &lt;code&gt;@&lt;/code&gt; 记录，以及指向 &lt;code&gt;github.io&lt;/code&gt; 和 &lt;code&gt;pages.dev&lt;/code&gt; 的旧 CNAME 记录，然后全部替换为 ESA 分配给你的专属 CNAME 地址：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Host&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;TTL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;根域名 &lt;code&gt;@&lt;/code&gt; 或需要加速的子域名（如 &lt;code&gt;www&lt;/code&gt; 或 &lt;code&gt;imgs&lt;/code&gt;）&lt;/td&gt;
&lt;td&gt;阿里云给你提供的对应域名加速地址&lt;/td&gt;
&lt;td&gt;自动 (Automatic)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;申请 SSL 证书&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;在 ESA 控制台选择 &lt;strong&gt;站点管理&lt;/strong&gt; ，左侧导航栏选择 &lt;strong&gt;SSL/TLS&lt;/strong&gt; → &lt;strong&gt;边缘证书&lt;/strong&gt;，页面下方可以看到 &lt;strong&gt;托管 DCV&lt;/strong&gt; 区域。&lt;/li&gt;
&lt;li&gt;在 &lt;strong&gt;托管 DCV&lt;/strong&gt; 区域，复制系统为你生成的 CNAME 信息（免费证书对应的是 &lt;code&gt;_acme-challenge&lt;/code&gt; 开头的记录），并在域名托管平台添加对应的 CNAME 记录：&lt;/li&gt;
&lt;/ol&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Host&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;TTL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;_acme-challenge&lt;/code&gt;（非泛域名则填 &lt;code&gt;_acme-challenge.&amp;lt;子域名&amp;gt;&lt;/code&gt;，如 &lt;code&gt;_acme-challenge.www&lt;/code&gt;）&lt;/td&gt;
&lt;td&gt;控制台复制的完整 CNAME 目标地址（&lt;code&gt;&amp;lt;hostname&amp;gt;&lt;/code&gt;为你的域名）&lt;/td&gt;
&lt;td&gt;自动 (Automatic)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;::: note 注意
该 CNAME 记录&lt;strong&gt;请务必保留&lt;/strong&gt;，这是后续证书自动续期的凭证。
:::&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;完成 DCV 配置并等待 DNS 生效后，在 &lt;strong&gt;证书管理&lt;/strong&gt; 板块，点击 &lt;strong&gt;申请免费证书&lt;/strong&gt;：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;证书颁发机构&lt;/strong&gt;：选择 &lt;code&gt;Let&apos;s Encrypt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;证书域名&lt;/strong&gt;：填入你需要用到的&lt;strong&gt;单域名&lt;/strong&gt;，例如：&lt;code&gt;example.com, www.example.com, imgs.example.com&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;提交后，由于 DCV 记录已经提前配好，系统会自动完成验证，证书通常几分钟内即可签发。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;证书签发完成后，开启下方的 &lt;strong&gt;强制 HTTPS&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;主站加速配置（GitHub Pages）&lt;/h2&gt;
&lt;p&gt;证书签发后，访问主站大概率会遇到 &lt;code&gt;ERR_TOO_MANY_REDIRECTS&lt;/code&gt;（重定向次数过多）。&lt;/p&gt;
&lt;p&gt;::: tip 为什么会死循环？
GitHub Pages 默认开启了强制 HTTPS。如果 ESA 用 HTTP 协议回源，GitHub 会返回 301 跳转回 HTTPS；ESA 如果没处理好这个跳转，浏览器就会在 HTTP 和 HTTPS 之间无限循环。
:::&lt;/p&gt;
&lt;h3&gt;配置主站回源规则&lt;/h3&gt;
&lt;p&gt;进入 ESA 控制台 → &lt;strong&gt;规则&lt;/strong&gt; → &lt;strong&gt;回源规则&lt;/strong&gt;，为主站新建一条规则：&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;匹配条件&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;主机名等于 &lt;code&gt;www.example.com&lt;/code&gt;（或 &lt;code&gt;example.com&lt;/code&gt;）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;回源协议&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;HTTPS&lt;/strong&gt;，端口 &lt;strong&gt;443&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;回源 Host&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;www.example.com&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;回源 SNI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;www.example.com&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;配置保存后，重新访问主站，重定向问题就会消失。&lt;/p&gt;
&lt;h2&gt;图床加速配置（Cloudflare Pages）&lt;/h2&gt;
&lt;p&gt;此时，访问 &lt;code&gt;imgs.example.com&lt;/code&gt; 可能会无法访问或直接返回 &lt;code&gt;403 Forbidden&lt;/code&gt;，然而直接访问 &lt;code&gt;project.pages.dev&lt;/code&gt; 一切正常。&lt;/p&gt;
&lt;p&gt;::: tip 为什么会 403？
Cloudflare Pages 对回源请求的校验极其严格。Cloudflare 依赖请求头里的 &lt;code&gt;Host&lt;/code&gt; 和 TLS 握手里的 &lt;code&gt;SNI&lt;/code&gt;（服务器名称指示）来识别你要访问哪个站。如果 ESA 发过去的身份对不上，就会被直接拒绝服务。
:::&lt;/p&gt;
&lt;h3&gt;配置图床回源规则&lt;/h3&gt;
&lt;p&gt;为了避免与主站冲突，需要在 ESA 中&lt;strong&gt;单独为图床新建一条回源规则&lt;/strong&gt;，并确保其&lt;strong&gt;优先级高于主站规则&lt;/strong&gt;：&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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;匹配条件&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;主机名等于 &lt;code&gt;imgs.example.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;回源协议&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;HTTPS&lt;/strong&gt;，端口 &lt;strong&gt;443&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;回源 Host&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;imgs.example.com&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;回源 SNI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;imgs.example.com&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;添加完回源规则后，你的自定义域名应该能够正常访问图床了。&lt;/p&gt;
</content:encoded></item><item><title>使用 Cloudflare 创建属于自己的免费图床</title><link>https://birdjiujiuuu.pages.dev/posts/20261028/</link><guid isPermaLink="true">https://birdjiujiuuu.pages.dev/posts/20261028/</guid><description>如何使用 Cloudflare 创建属于自己的免费图床。</description><pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;在写博客或者做个人项目时，一个稳定且免费的图床必不可少。目前市面上的图床要么限制多，要么面临随时跑路的风险。今天记录一下如何使用 &lt;strong&gt;Cloudflare R2 + Pages&lt;/strong&gt; 搭建一个属于自己的免费图床。&lt;/p&gt;
&lt;p&gt;这个方案有几个巨大的优势：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;免流量的费用&lt;/strong&gt;：Cloudflare R2 的读取操作和流量完全免费。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;国内访问友好&lt;/strong&gt;：使用 Pages 提供的 &lt;code&gt;pages.dev&lt;/code&gt; 域名，相比被墙的 &lt;code&gt;workers.dev&lt;/code&gt; 来说，在国内很多时候可以直连，速度尚可。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;防超额扣费&lt;/strong&gt;：通过 Pages Functions 代理和强缓存，配合 Fail closed 机制，杜绝了超额扣费的风险。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;目录结构自定义&lt;/strong&gt;：直接映射 R2 中的文件夹结构，无需重新部署即可上传新图。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;准备工作&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;一个 Cloudflare 账号。&lt;/li&gt;
&lt;li&gt;一张银行卡（储蓄卡或信用卡都可以）或 PayPal（开通 R2 需要验证，但不会产生费用）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;第一步：创建并配置 R2 存储桶&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;登录 Cloudflare 控制台，在左侧导航栏找到并进入 &lt;strong&gt;R2&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;点击 &lt;strong&gt;创建存储桶&lt;/strong&gt;，并给你的图床起个名字，例如 &lt;code&gt;images&lt;/code&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;/li&gt;
&lt;li&gt;&lt;strong&gt;默认情况下，存储桶不能公开访问，但还是建议确认一下。&lt;/strong&gt; 找到 &lt;strong&gt;公共开发 URL&lt;/strong&gt;，确认其为关闭的。我们要保证存储桶是私有的，所有访问必须走我们自己的 Pages。&lt;/li&gt;
&lt;li&gt;在存储桶中点击 &lt;strong&gt;创建文件夹&lt;/strong&gt; ，然后进去上传图片。比如创建一个 &lt;code&gt;example&lt;/code&gt; 文件夹，里面再建一个 &lt;code&gt;album&lt;/code&gt; 文件夹，上传一张 &lt;code&gt;01.jpg&lt;/code&gt;，它的 Key 就是 &lt;code&gt;example/album/01.jpg&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;第二步：创建 Pages 项目并绑定 R2&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;在控制台进入 &lt;strong&gt;Workers 和 Pages&lt;/strong&gt;，创建一个新的 Pages 项目（Pages 项目在底下的小字部分），选择 &lt;strong&gt;拖放文件&lt;/strong&gt; 选项。&lt;/li&gt;
&lt;li&gt;进入 Pages 项目的 &lt;strong&gt;设置&lt;/strong&gt; -&amp;gt; &lt;strong&gt;绑定&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;点击 &lt;strong&gt;添加&lt;/strong&gt; -&amp;gt; &lt;strong&gt;R2 存储桶&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;变量名称&lt;/strong&gt; 填入 &lt;code&gt;Images&lt;/code&gt;（代码里会用到，请保持一致，注意大小写）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;R2 存储桶&lt;/strong&gt; 选择你刚创建的 &lt;code&gt;images&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;保存后，&lt;strong&gt;必须重新部署一次项目&lt;/strong&gt;，绑定才会生效。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;第三步：编写 Functions 代码&lt;/h2&gt;
&lt;p&gt;我们要让 Pages 在根目录下拦截所有请求，去 R2 里找对应的图片。&lt;/p&gt;
&lt;p&gt;由于在 Cloudflare Pages 中，要使 functions 生效，必须要使用 Wrangler 部署。因此，我们在电脑的空白文件夹下创建 &lt;code&gt;functions/[[path]].js&lt;/code&gt; 文件，并写入以下代码：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export async function onRequest(context) {
  const { request, env, params } = context;

  if (request.method !== &quot;GET&quot; &amp;amp;&amp;amp; request.method !== &quot;HEAD&quot;) {
    return new Response(&quot;Method Not Allowed&quot;, { status: 405 });
  }

  // params.path 是路径片段数组，例如 /example/01.jpg → [&quot;example&quot;, &quot;01.jpg&quot;]
  const rawKey = (params.path || []).join(&quot;/&quot;);

  // 安全清理，防止 ../ 路径遍历
  const key = rawKey
    .split(&quot;/&quot;)
    .filter((segment) =&amp;gt; segment &amp;amp;&amp;amp; segment !== &quot;.&quot; &amp;amp;&amp;amp; segment !== &quot;..&quot;)
    .join(&quot;/&quot;);

  // 根路径 / 没有对应对象，返回一个简单提示
  if (!key) {
    return new Response(&quot;Image Hosting&quot;, { status: 200 });
  }

  // 这里的 Images 应该和上面 R2 存储桶的变量名称一致
  const object = await env.Images.get(key);
  if (object === null) {
    return new Response(&quot;Not Found&quot;, { status: 404 });
  }

  const headers = new Headers();
  object.writeHttpMetadata(headers);
  headers.set(&quot;etag&quot;, object.httpEtag);
  headers.set(&quot;Cache-Control&quot;, &quot;public, max-age=31536000, immutable&quot;);

  if (request.method === &quot;HEAD&quot;) {
    return new Response(null, { headers });
  }

  return new Response(object.body, { headers });
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;第四步：使用 Wrangler 部署项目&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;确保你的电脑安装了 &lt;code&gt;Node.js&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;打开终端（命令行），进入你刚刚创建 &lt;code&gt;functions&lt;/code&gt; 文件夹的根目录。&lt;/li&gt;
&lt;li&gt;运行以下命令进行部署（第一次运行可能会提示你登录 Cloudflare 账号，按提示授权即可）：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;npx wrangler pages deploy . --project-name=&amp;lt;你的项目名称&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;部署成功后，终端会返回一个预览或生产环境的 URL。&lt;/p&gt;
&lt;h2&gt;第五步：设置防超额扣费&lt;/h2&gt;
&lt;p&gt;这是整个方案中最核心的一步。由于 R2 免费额度用完后是 &lt;strong&gt;自动按量计费&lt;/strong&gt; 的，为了确保万无一失，我们需要利用 Pages Functions 的额度限制来间接锁死 R2 的消耗。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;进入你的 Pages 项目，点击 &lt;strong&gt;设置&lt;/strong&gt; -&amp;gt; &lt;strong&gt;运行时&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;找到 &lt;strong&gt;失败开放 (Fail open)&lt;/strong&gt; / &lt;strong&gt;失败关闭 (Fail closed)&lt;/strong&gt; 选项，将其修改为 &lt;strong&gt;失败关闭 (Fail closed)&lt;/strong&gt;，然后保存。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;::: tip 为什么选 Fail closed？
Pages Functions 的免费额度是 &lt;strong&gt;每天 10 万次请求&lt;/strong&gt;，当 10 万次额度用尽后，Pages 会直接停止工作（返回 1027 错误），而不会继续绕过 Function 去请求后面的资源。这样一来，你的 R2 读取次数被死死卡在每天 10 万次以内，远远低于 R2 免费提供的每月 1000 万次读取额度，这样就可以有效防止超额扣费。
:::&lt;/p&gt;
&lt;h2&gt;第六步：测试与验证&lt;/h2&gt;
&lt;p&gt;部署完成后，在浏览器中打开你的图片链接：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://你的项目名称.pages.dev/example/album/01.jpg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果图片正常显示，说明基本配置已经成功。至此，你的专属免费图床已经搭建完毕。&lt;/p&gt;
&lt;h2&gt;（可选）设置自定义域名&lt;/h2&gt;
&lt;p&gt;如果你希望图床链接使用自己的域名，可以在这一步继续配置，整个配置过程完全 &lt;strong&gt;不影响你已有的主域名或其他子域名解析&lt;/strong&gt;。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;在 Cloudflare Pages 中添加域名&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在 Cloudflare 中选择你的图床项目，点击 &lt;strong&gt;自定义域&lt;/strong&gt; -&amp;gt; &lt;strong&gt;设置自定义域&lt;/strong&gt;，输入你想要的子域名（如 &lt;code&gt;imgs.你的域名.com&lt;/code&gt;）并继续。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;页面会给出一个 &lt;strong&gt;CNAME 目标地址&lt;/strong&gt;（通常是你的 &lt;code&gt;项目名.pages.dev&lt;/code&gt;），请记录下来。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;在域名服务商处配置解析&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;登录你的域名后台，进入 &lt;strong&gt;Advanced DNS&lt;/strong&gt; 选项。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;添加一条新的 &lt;strong&gt;CNAME Record&lt;/strong&gt; 并保存：&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Host&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;TTL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;imgs&lt;/code&gt;（你的子域名前缀）&lt;/td&gt;
&lt;td&gt;刚才记录下的 &lt;strong&gt;CNAME 目标地址&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自动 (Automatic)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;:::note 注意
由于只修改子域名，你无需将整个域名的 NS 迁移到 Cloudflare。
:::&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;等待生效&lt;/strong&gt;
DNS 通常需要几分钟到半小时生效。回到 Cloudflare Pages 的页面，当状态变为 &lt;strong&gt;“活动” (Active)&lt;/strong&gt; 时，说明配置成功，SSL 证书也会自动签发。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;配置完成后，你原有的 &lt;code&gt;pages.dev&lt;/code&gt; 地址依然可以访问。但在博客中引用图片时，你可以使用你自己的专属链接了，例如将 &lt;code&gt;https://你的项目名称.pages.dev/example/album/01.jpg&lt;/code&gt; 替换为 &lt;code&gt;https://imgs.你的域名.com/example/album/01.jpg&lt;/code&gt;。&lt;/p&gt;
&lt;h2&gt;日常使用指南&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;上传新图&lt;/strong&gt;：直接在 Cloudflare R2 控制台进入对应的文件夹上传即可，&lt;strong&gt;无需再次运行 Wrangler 部署&lt;/strong&gt;，URL 会自动生效。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;引用图片&lt;/strong&gt;：在博客或论坛中，直接使用 &lt;code&gt;https://你的项目名称.pages.dev/文件夹/子文件夹/文件名.jpg&lt;/code&gt; 即可。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;代码备份&lt;/strong&gt;：请务必妥善保存本地的 &lt;code&gt;functions/[[path]].js&lt;/code&gt; 文件。由于我们使用的是直接上传部署，云端的代码只是编译后的产物，本地代码可以帮助你日后修改配置。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item></channel></rss>