我有一个域名挂在Cloudflare Pages上,搭了个简单的出售页面。结果发现访问日志里总有一些奇奇怪怪的乱码子域名在刷访问量,比如xn--seo-xxx.***.net、随机字符串.yinliucaishen.***.net,一天能刷好几十条。
这些乱码子域名其实还是指向我的主域,但我根本没给这些子域名做过任何解析和绑定。它们大多是SEO垃圾站群在批量探测、扫描器在乱撞,或者有人通过伪造Host头往我的Pages项目里灌请求。我一开始以为是泛域名解析的问题,跑去关掉,又删了404页面,折腾了一圈——完全没用。因为Pages根本不关心你DNS怎么设,只要请求到了它边缘节点,就会直接返回你的静态页面,不管你绑没绑定域名,也不管这个子域名存不存在。
那这些无关访问到底有什么坏处?
- 数据污染:你的访问统计里一半是机器人,根本看不清真实用户有多少,转化分析全废了。
- 消耗免费额度:Pages每月有10万次请求的免费额度,被这些无效流量白白刷掉,万一超了还得额外付费。
- 拖累SEO:搜索引擎如果发现大量异常子域名指向你的内容,可能误判你在搞站群或挂黑链,影响主域名权重。
- 干扰业务判断:你不知道哪些域名真的有人看,哪些是废流,谈出售或续费时心里没底。
所以必须把非法访问挡在门外,最直接有效的方法就是加一道白名单拦截——只允许我自己绑定的那几个域名访问,其他的全部返回403禁止访问。
拒绝恶意蹭流量,操作分三步走:
第一步,设置环境变量。
在Pages项目的「设置」-「变量和密钥」里,添加一个ALLOWED_HOSTS,把你要放行的域名用英文逗号隔开填进去,比如:
xxx.net,www.xxx.net,xxx.com,www.xxx.com
第二步,在项目根目录新建_worker.js文件。
把下面的代码贴进去保存:
export default {
async fetch(request, env) {
const url = new URL(request.url);
const hostname = url.hostname;
const allowed = (env.ALLOWED_HOSTS || '').split(',').map(s => s.trim()).filter(Boolean);
if (allowed.length > 0 && !allowed.includes(hostname)) {
return new Response('Forbidden: Invalid Host', { status: 403 });
}
return await env.ASSETS.fetch(request);
}
};
第三步,重新上传部署。
把包含_worker.js和所有静态文件的文件夹重新上传一遍就行了。部署完之后再访问xxx.pages.dev,直接给你403,再也刷不动了。
整个过程5分钟搞定,不用改DNS,不用关CDN,也不用折腾那些乱七八糟的路由设置。现在日志干净多了,真实访问一目了然,额度也省下来了。如果你也遇到类似的困扰,直接照搬就行,实测有效。
© 一梦风神 · 本文采用 CC BY-NC 4.0 协议共享

发表回复