# CloudFlare CDN

因为国内外都有很多大公司在使用CloudFlare的CDN服务（毕竟第一大云商），包括像中国石化、中国电信这种国企，所以几乎不可能被封禁，因此关于如何用CloudFlare CDN拯救被墙IP网上有很多五花八门的教程，但是经过我无数次的实践发现很多教程根本无法实现（大概是墙进化了，这些方法就过时了），我这里的方法应该是独家原创的，转载请务必注明出处！

关键步骤：

* 域名绑定到CloudFlare并且在SSL/TLS选项卡中采用完全严格的加密模式，生成一份由 Cloudflare 签名的免费源服务器 TLS 证书，下载保存，然后让你需要的CDN域名A记录解析到你的VPS服务器IP，并且通过CloudFlare代理（点亮黄云）
* 利用x-ui面板或者任意xray/v2Ray脚本搭建一个vmess/vless节点，采用ws协议，并且一定要设置ws路径。注意这里创建的就是一个普通的ws协议节点，不需要考虑什么端口和伪装域名
* 复制节点到v2RayN进行测速，确保节点本身配置没有问题（当然如果IP已经被墙了那就连不通）
* 利用Ngnix进行反代，可以用宝塔面板，也可以用NPM，两种方法下面其他对应章节都有，注意导入SSL证书为刚才CloudFlare生成的源证书，宝塔反代地址为[http://127.0.0.1:节点端口，NPM反代地址为http://docker](https://docs.st0722.top/zheng-jiu-bei-qiang-ip/http:/127.0.0.1:节点端口，NPM反代地址为http:/docker) network ip:节点端口，具体看后面对应的NPM教程，注意要开启ws支持
* 复制刚才导出的节点，将地址改成你设置的CDN域名，端口改成443，传输层安全协议改成TLS，其他不变（注意检查ws路径），再进行测速应该就可以了，如果不通可以浏览器访问CDN域名/ws路径看看，显示403表示CDN还未生效，显示Bad Request说明已经成功
* 然后这个节点的流量就会通过CloudFlare CDN了，可以去分析日志看看流量

其他注意事项：

CloudFlare免费用户不提供中国大陆服务器（参见官方计费表：<https://www.cloudflare-cn.com/plans/>），因此大多数情况下套了CDN你的节点速度是会变慢的，所以在没被墙的情况下就别想着用CloudFlare CDN来加速了，当然还有各种优选IP的工具，不过我个人认为那样就让本来就很麻烦的事情更加繁琐了，我个人不推荐

注：可以直接看下面第三次更新，全面升级全链路加密真正的CDN

#### 2024年1月更新：

在研究其他项目的时候发现CloudFlare现在有一个Origin Rules服务，目前在域名的规则页面中，可以直接进行端口转发，也就是说不需要锁死80和443端口了，在上面的步骤中也就不需要进行反代了，目前我还没进行过详细的测试，不过配置看上去应该挺简单的

<figure><img src="https://620835535-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz13CX9Yv5tWADdJ6iySU%2Fuploads%2FPd44auhiEAMxO0Gst9Ej%2Fimage.png?alt=media&#x26;token=ceef76a4-358d-40a2-b381-8a84e6b50a17" alt=""><figcaption></figcaption></figure>

#### 2024年1月中旬更新：

上面的源站规则我经过测试貌似无法用于我们这里需要的跑指定端口的ws服务，我用的是URI匹配的方法，其他方法也有过尝试，基本都以失败告终，我们暂时不再多做尝试，有兴趣的可以自己研究

我最近从山东回到了浙江，不知道为什么貌似封锁更加严格一些，就顺便折腾了一下这个CDN，一方面抗封锁以防万一，另一方面在高压环境下日常使用也会舒服很多（日常使用的话强烈建议有多个域名的人使用），于是就有了下面这个进阶玩法：

首先CloudFlare中的DNS记录（CDN）不需要变，直接指向源站的443端口即可：

<figure><img src="https://620835535-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz13CX9Yv5tWADdJ6iySU%2Fuploads%2FKC3YydQ0RfCrhs5KN3Fv%2Fimage.png?alt=media&#x26;token=1b2ee745-adf0-403e-82a7-8aff35922d1b" alt=""><figcaption></figcaption></figure>

然后在源站的反代中（我们全部用NPM演示反代操作，其他宝塔面板之类的都类似）我们指向了其他网页服务端口（比如我们这里指向了4000端口就是我们WARD面板的端口，此时直接访问这个域名就会显示我们搭建的WARD面板，伪装属性拉满）：

<figure><img src="https://620835535-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz13CX9Yv5tWADdJ6iySU%2Fuploads%2FsBtqgT4OhaSVFsjcz5Za%2Fimage.png?alt=media&#x26;token=501ecd6c-0f97-4384-9fa5-1b7003c0fa14" alt=""><figcaption></figcaption></figure>

<figure><img src="https://620835535-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz13CX9Yv5tWADdJ6iySU%2Fuploads%2Fde9MgiWvZwTiE0FeZDYs%2Fimage.png?alt=media&#x26;token=b2bf893c-b268-4f5f-a81f-c359f4795108" alt=""><figcaption></figcaption></figure>

然后再用路径分流，不同的ws路径指向不同的ws服务端口：

<figure><img src="https://620835535-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz13CX9Yv5tWADdJ6iySU%2Fuploads%2FqXBwNB2XHyfVhYHwBVxd%2Fimage.png?alt=media&#x26;token=72de05bb-5e0e-4b3c-83a2-cd50882ac638" alt=""><figcaption></figcaption></figure>

<figure><img src="https://620835535-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz13CX9Yv5tWADdJ6iySU%2Fuploads%2FlhoHcadNz9eg4ulQt1Bz%2Fimage.png?alt=media&#x26;token=aa9373dc-8400-440c-9a5a-cb3bcf420f41" alt=""><figcaption></figcaption></figure>

这样就可以实现一个域名对应多个不同的节点和不同的端口，安全性同样拉满，这就是我们今天新增的进阶玩法

#### 2024年1月第3次更新：全链路加密：这才是真正的CDN！！！

先给大家看看效果（其实还可以更快，没有上限，因为速度一直在稳定上升，受限于speedtest的总测速时间才导致最终显示569Mbps）：

<figure><img src="https://620835535-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz13CX9Yv5tWADdJ6iySU%2Fuploads%2FHM137x1suWpGwKCxlxlp%2Fimage.png?alt=media&#x26;token=3e4003c3-2cd2-4182-a852-91a2af741093" alt=""><figcaption></figcaption></figure>

这次我们成功使用CloudFlare的Origin Rules源站规则实现真正的全链路加密和真正的CDN，这样的实际效果完全可以日常使用了，而不再是作为高压环境下的被迫反击。首先思路跟上面是一样的，不同的URI路径（也就是不同的ws路径）指向不同的段口，不过这次用了Origin Rules实现，直接去掉了中间的NPM反代环节，大幅提升了性能和稳定性。要用Origin Rules有一些前提条件，也就是全链路加密，这首先需要将加密模式设置为完全严格：

<figure><img src="https://620835535-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz13CX9Yv5tWADdJ6iySU%2Fuploads%2F2zeFB28XAiUoQukGtqSF%2Fimage.png?alt=media&#x26;token=68ead0b8-235e-4b27-8688-151bf8e520aa" alt=""><figcaption></figcaption></figure>

然后生成CF的源证书，并安置到服务器上：

<figure><img src="https://620835535-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz13CX9Yv5tWADdJ6iySU%2Fuploads%2FptYYEvtnes6puhCd4oi6%2Fimage.png?alt=media&#x26;token=b312102f-1a13-4351-af13-727d254e5cf2" alt=""><figcaption></figcaption></figure>

<figure><img src="https://620835535-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz13CX9Yv5tWADdJ6iySU%2Fuploads%2Fwu4lsJvfpen8taw0nobj%2Fimage.png?alt=media&#x26;token=b739371c-cc68-4c72-a4bc-bf9c2c88dd02" alt=""><figcaption></figcaption></figure>

然后到xui面板设置中添加这个证书（这一步并非必要，因为它是让XUI面板走CDN全链路加密，并不是我们的节点）：

<figure><img src="https://620835535-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz13CX9Yv5tWADdJ6iySU%2Fuploads%2F5UpsIn74F0Env5tcn4Ev%2Fimage.png?alt=media&#x26;token=757071fa-f17a-4fe0-aa6c-21cc4f1aaa89" alt=""><figcaption></figcaption></figure>

然后到CloudFlare的Origin Rules中设置URI路径包含的匹配规则，实现端口转发，比如我这里xui面板在11111端口就转发到11111端口：

<figure><img src="https://620835535-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz13CX9Yv5tWADdJ6iySU%2Fuploads%2FBv8QEtk6JrQ737U9pKoU%2Fimage.png?alt=media&#x26;token=b45820e8-a735-4c34-a135-af7924dfb8f9" alt=""><figcaption></figcaption></figure>

创建CDN节点也是同理，创建后到Origin Rules中根据ws路径设置端口转发即可：

<figure><img src="https://620835535-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz13CX9Yv5tWADdJ6iySU%2Fuploads%2F5UYX0MdVhc8oEY29G5Ek%2Fimage.png?alt=media&#x26;token=bcd12b8e-adb1-4696-8214-f6e5c3e94125" alt=""><figcaption></figcaption></figure>

Origin Rules唯一的缺点就在于一共只能创建10条规则，如果你的需求不只是那么几个节点，想要创建更多节点或者想用Origin Rules穿透其他的网页服务（比如上面的示例中提到的WARD面板等），那就不够用了，这个时候可以使用下面一个章节的Argo服务


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.st0722.top/zheng-jiu-bei-qiang-ip/cloudflare-cdn.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
