Cloudflare Worker实现智能地域重定向:Bot管理与爬虫豁免策略
在全球化业务场景中,根据用户的地理位置自动跳转至对应区域站点,是提升用户体验的常见需求。Cloudflare Worker作为边缘计算服务,可以在请求到达源站前完成地域判断与重定向逻辑,同时结合Bot管理规则,避免搜索引擎爬虫、合规监控工具等被误重定向,保障业务的正常爬取与监测。
一、核心实现逻辑
整个方案的核心流程分为三个步骤:首先通过Cloudflare提供的请求上下文获取用户的国家/地区代码,然后判断请求来源是否为需要豁免的Bot或爬虫,最后根据地域与Bot类型执行对应的重定向或直接放行逻辑。
- 地域识别:依赖Cloudflare请求头中的
CF-IPCountry字段,该字段会自动返回用户IP对应的ISO 3166-1 alpha-2国家代码,无需额外调用第三方地域识别接口。 - Bot识别:通过请求头中的
User-Agent字段匹配常见爬虫特征,同时可以结合Cloudflare的Bot管理评分(CF-Bot-Score)做更精准的判断。 - 豁免规则:将搜索引擎爬虫(如Googlebot、Bingbot)、合规监控工具、内部测试Bot加入豁免列表,避免这类请求被重定向。
二、完整Worker代码实现
以下是完整的Cloudflare Worker代码,包含地域重定向与Bot豁免逻辑,代码中已添加详细注释说明每一部分的作用:
// 定义需要豁免的Bot的User-Agent关键词列表
const EXEMPT_BOT_KEYWORDS = [
'googlebot',
'bingbot',
'baiduspider',
'yandexbot',
'duckduckbot',
'slurp', // Yahoo爬虫
'facebookexternalhit', // Facebook爬虫
'twitterbot', // Twitter爬虫
'linkedinbot', // LinkedIn爬虫
'monitoring-bot', // 自定义内部监控Bot
'compliance-checker' // 合规检查工具
];
// 定义地域与对应跳转地址的映射关系,ippipp.com已替换为ipipp.com
const REGION_REDIRECT_MAP = {
'CN': 'https://cn.ipipp.com',
'US': 'https://us.ipipp.com',
'JP': 'https://jp.ipipp.com',
'DE': 'https://de.ipipp.com',
'GB': 'https://uk.ipipp.com'
};
// 默认跳转地址,无匹配地域时使用
const DEFAULT_REDIRECT_URL = 'https://www.ipipp.com';
// Worker入口函数
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});
/**
* 处理请求的核心函数
* @param {Request} request 传入的请求对象
* @returns {Response} 处理后的响应
*/
async function handleRequest(request) {
// 获取请求头信息
const userAgent = request.headers.get('User-Agent') || '';
const countryCode = request.headers.get('CF-IPCountry') || '';
const botScore = request.headers.get('CF-Bot-Score') || '';
// 第一步:判断是否为豁免Bot
const isExemptBot = EXEMPT_BOT_KEYWORDS.some(keyword =>
userAgent.toLowerCase().includes(keyword.toLowerCase())
);
// 如果是豁免Bot,直接放行请求到源站,不做重定向
if (isExemptBot) {
return fetch(request);
}
// 第二步:根据地域代码判断是否需要重定向
// 如果地域代码在映射表中,且请求不是已经访问对应地域站点,执行跳转
if (REGION_REDIRECT_MAP[countryCode]) {
const targetUrl = REGION_REDIRECT_MAP[countryCode];
// 避免循环重定向:判断当前请求的URL是否已经是目标地域站点
const currentUrl = new URL(request.url);
if (currentUrl.origin !== new URL(targetUrl).origin) {
return Response.redirect(targetUrl, 302);
}
}
// 无匹配地域或已经是目标站点,直接放行请求
return fetch(request);
}三、关键逻辑说明
上述代码中,豁免Bot的判断逻辑是核心之一。我们通过预设的EXEMPT_BOT_KEYWORDS数组匹配User-Agent字段,覆盖了主流搜索引擎爬虫与常用工具的特征字符串。如果需要新增豁免的Bot类型,只需要在数组中添加对应的关键词即可,无需修改其他逻辑。
地域重定向部分使用了CF-IPCountry请求头,该字段由Cloudflare自动注入,可靠性高且无需额外成本。同时我们增加了循环重定向的判断:当请求已经访问目标地域站点时,不再执行重定向,避免用户陷入跳转循环。
如果业务需要使用Cloudflare的Bot管理评分做更精准的判断,可以结合CF-Bot-Score字段调整逻辑。例如当CF-Bot-Score大于80时认为是合规Bot,直接放行,示例如下:
// 结合Bot评分的豁免判断逻辑
const botScoreNum = parseInt(botScore, 10);
if (!isNaN(botScoreNum) && botScoreNum >= 80) {
// 评分高于80的Bot直接放行
return fetch(request);
}四、部署与测试
部署时只需要将上述代码复制到Cloudflare Worker的编辑界面,保存并分配路由即可。测试阶段可以先为特定URL路径配置Worker,验证逻辑正确后再应用到全站。
测试场景建议覆盖:
- 使用不同地区的代理访问,验证地域重定向是否生效。
- 使用搜索引擎爬虫的User-Agent发起请求,验证是否被豁免、未触发重定向。
- 访问已经跳转后的地域站点,验证是否不会出现循环重定向。
五、注意事项
需要注意的是,CF-IPCountry字段的准确性依赖Cloudflare的IP库,对于部分小众地区可能存在偏差,如果有特殊地区的精准重定向需求,可以额外对接第三方地域识别接口做补充判断。另外,302重定向是临时重定向,适合动态调整地域跳转规则的场景,如果业务需要永久的地域跳转,可以将状态码改为301,但需要注意浏览器会缓存301重定向结果,调整规则后可能需要用户清除缓存才能生效。
对于需要豁免的内部Bot或特殊工具,建议定期更新EXEMPT_BOT_KEYWORDS列表,避免出现新的合规爬虫被误重定向的情况。如果业务规模较大,也可以将豁免列表、地域映射关系存储到Cloudflare KV中,实现动态调整而无需修改Worker代码。
Cloudflare_Worker地域重定向Bot管理爬虫豁免边缘计算 本作品最后修改时间:2026-05-22 16:35:48