Cloudflare IP优选完整指南

清夏晚风

Cloudflare IP优选完整指南

Cloudflare作为全球最大的CDN服务商之一,在国内访问时有时会出现速度较慢的情况。通过IP优选技术,我们可以显著提升Cloudflare在国内的访问速度和网站可用性。

什么是Cloudflare IP优选

Cloudflare IP优选是指通过筛选出在国内访问速度较快的Cloudflare节点IP,替换默认解析的IP地址,从而提升网站访问速度的技术。优选后的网站响应速度有显著提升,并且出口IP也变多,大大提高了网站的可用性和加载速度。

Worker路由反代全球并优选

这种方法的原理是通过Cloudflare Worker反代源站,然后将Worker的入口节点进行优选。此方法不是传统的优选,源站接收到的Hosts头仍然是直接指向源站的解析。

配置步骤

  1. 创建Cloudflare Worker
    • 登录Cloudflare控制台,进入Workers页面
    • 创建一个新的Worker,写入以下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// 域名前缀映射配置
const domain_mappings = {
'源站.com': '最终访问头.',
//例如:
//'gitea.072103.xyz': 'gitea.',
//则你设置Worker路由为gitea.*都将会反代到gitea.072103.xyz
};

addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});

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

// 强制使用 HTTPS
if (url.protocol === 'http:') {
url.protocol = 'https:';
return Response.redirect(url.href, 301);
}

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

// 查找对应目标域名
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('No matching target host for prefix', { status: 404 });
}

// 构造目标 URL
const new_url = new URL(request.url);
new_url.protocol = 'https:';
new_url.host = target_host;

// 创建新请求
const new_headers = new Headers(request.headers);
new_headers.set('Host', target_host);
new_headers.set('Referer', new_url.href);

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

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

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;
}
  1. 创建路由规则

    • 在Worker设置中添加路由规则,例如:gitea.xxxx.xxx/*

    img

    img

  2. 配置DNS解析

    • 添加一条CNAME记录,将子域名指向优选域名,例如:
      gitea.afo.im --> cf.090227.xyz

针对A、AAAA、CNAME(SaaS接入)的优选方案

准备工作

需要两个域名(例如:onani.cn和acofork.cn)。如果在同一CF账号下不可用,请尝试将两个域名放置在不同账号。

这里让onani.cn成为主力域名,让acofork.cn成为辅助域名。

配置步骤

  1. 设置源站DNS解析

    • 在辅助域名中新建一条DNS解析,指向源站,开启CF代理
  2. 配置自定义主机名

    • 前往辅助域名的SSL/TLS -> 自定义主机名
    • 设置回退源为刚才的DNS解析域名(如xlog.acofork.cn)
    • 点击添加自定义主机名,设置为主力域名(如onani.cn)
    • 选择自定义源服务器,填写第一步的域名(xlog.acofork.cn)
  3. 添加优选解析

    • 在辅助域名添加一条CNAME解析,指向优选节点(如cloudflare.182682.xyz),不开启CF代理
  4. 配置主力域名

    • 在主力域名添加解析,域名为自定义主机名(onani.cn),目标为cdn.acofork.cn,不开启CF代理
  5. (可选)线路分流

    • 将cdn子域的NS服务器更改为阿里云/华为云/腾讯云云解析做线路分流解析

工作流程

用户访问 -> 由于最终访问的域名设置了CNAME解析,所以实际上访问了cdn.acofork.cn,并且携带源主机名:onani.cn -> 到达优选节点进行优选 -> 优选结束,CF边缘节点识别到携带的源主机名:onani.cn查询发现回退源 -> 回退到回退源内容(xlog.acofork.cn) -> 访问成功

针对Cloudflare Pages的优选方案

  1. NS服务器切换

    • 直接将绑定到Page的子域名NS服务器更改为阿里云/华为云/腾讯云云解析做线路分流解析
  2. 迁移至Worker

    • 将Page项目升级为Worker项目,使用Worker优选方案(更简单)
    • 详细方法可参考相关视频教程

针对Cloudflare Workers的优选方案

  1. 在Workers中添加路由,然后直接将路由域名从指向xxx.worker.dev改为cloudflare.182682.xyz等优选域名即可

疑难解答

Q: 如果源站使用Cloudflare Tunnels怎么办?

A: 需要在Tunnels添加两个规则,一个指向辅助域名,一个指向最终访问的域名。然后删除最终访问域名的DNS解析(但不要直接在Tunnels删,会掉白名单导致用户访问404)。

原理: 如果Cloudflare Tunnels只设置一个规则,会导致优选工作流中出现域名白名单不匹配的问题,从而返回404错误。

Q: 如果源站使用Cloudflare Origin Rule(端口回源)怎么办?

A: 需要将规则的生效主机名改为最终访问的域名,否则不触发回源策略。

原理: 如果Origin Rule的生效主机名为辅助域名,在优选工作流中会导致无法触发回源策略,访问失败。

Q: 如果源站使用serv00怎么办?

A: 需要在WWW Web Site界面添加两个规则,一个指向辅助域名,一个指向最终访问的域名。

原理: serv00会拦截不在白名单的域名请求,只配置一个域名会导致访问错误。

优选效果对比

通过实施上述优选方案,可以看到明显的改善效果:

  • 未优选:响应速度较慢,部分地区可能出现超时
  • 已优选:响应速度大幅提升,出口IP增多,网站可用性大大提高

注意事项

  1. 优选域名需要定期更新,因为Cloudflare节点IP可能会发生变化
  2. 不同地区的优选效果可能有所差异,建议根据实际访问情况进行调整
  3. 使用优选方案时要注意源站的安全配置,避免因域名白名单问题导致访问失败
  4. 定期监控优选效果,确保网站访问质量

通过合理的Cloudflare IP优选配置,可以显著提升网站在国内的访问速度和用户体验。

  • Title: Cloudflare IP优选完整指南
  • Author: 清夏晚风
  • Created at : 2025-12-20 11:24:54
  • Updated at : 2026-01-13 16:48:23
  • Link: https://blog.kimikkorow.eu.org/云服务器相关/云服务商/Cloudflare/01.CloudFlare优选/
  • License: This work is licensed under CC BY-NC-SA 4.0.