大家好,我是 Wikidocs 的运营者。 最近,我来分享一下我们在运营 Wikidocs 服务器时,与 AI 机器人进行斗争的经历,以及引入 Cloudflare 后的使用心得。 Wikidocs 虽然不是规模庞大的网站,但它承受着相当大的流量。然而,在过去的三个月里,流量开始异常激增。当然,如果是普通访客的话,那会是件天大的好事,但可惜的是,绝大部分都是企图抓取 Wikidocs 数据的 AI 学习机器人(Bot)。 1. 无情的 AI 机器人空袭 这些机器人请求简直是无情的,可以说是事实上的 DDoS 攻击。尤其是来自美国的访问量是韩国的 10 倍以上。一个韩语网站,美国的访客数量是韩国的 10 倍,这绝对不正常。虽然其中有一些是有良知的机器人,但同时发送 100 多个请求的恶意机器人也确实存在。 最近,我们与这些机器人进行了各种战斗。初期,我们通过 Nginx 配置和 Fail2ban 等方法的组合来应对,但它们通过 VPN 频繁更换 IP 地址的 접속方式让我们无能为力,形势岌岌可危。难道 Wikidocs 被传成了数据学习的“美食店”?最近一周,这些 AI 学习机器人猖獗,持续涌入服务器难以承受的流量。 2. 又爱又恨的 Cloudflare 重启 最终,为了结束这场战斗,我们引入了“Cloudflare”。 Wikidocs 在 3 年前就有使用 Cloudflare 的经验。但当时因为速度问题和 Google 索引问题而取消了。 引入 Cloudflare 后,无论使用 Free、Pro、Business 还是其他套餐,都不会连接到韩国区域,而是连接到海外区域,导致速度非常慢。如果引入 Enterprise(企业版)套餐,就可以连接到韩国区域并实现快速访问,但价格实在是“天上”般昂贵。我认为 Enterprise 套餐只有大公司才用得起。 而且,3 年前虽然没有查明明确的原因,但 Google 搜索机器人出现了问题,导致 Google 索引的 Wikidocs 页面全部消失,发生了惨剧。由于 Google 搜索流量的断绝,Wikidocs 的主要收入来源 AdSense 广告费也随之暴跌。 然而,尽管有过去经历的不安,我们还是不得不再次使用 Cloudflare。这是为了防止服务器因 AI 机器人攻击而宕机,别无选择的选择。
1. 무자비한 AI 봇들의 공습
Wikidocs 应用了“Pro”版本。我们并不需要 Business 功能,只需要配置 DDoS 防护和安全规则,阻止大量的美国流量即可。 应用 Cloudflare 后,服务器不再宕机。Cloudflare 会自主进行一些防护,另外,对于从韩国以外的访问,我们使用了“Challenge(挑战)”功能,增加了机器人访问的难度。考虑到 3 年前 Google 索引页面消失的噩梦,我们仔细地设置了不将搜索机器人纳入其中。 3. 安全解决了,但速度成了问题 大问题解决了,但又出现了另一个大问题,那就是“速度”问题。Cloudflare 虽然有韩国区域,但由于韩国的网络使用费昂贵,非 Enterprise 级别的套餐绝对不会连接到韩国区域。所以,通过浏览器访问 Wikidocs 时,不是连接到近在咫尺的韩国区域,而是连接到美国或网络使用费便宜的地方,我们不得不忍受糟糕的速度。 4. 救世主 Argo Smart Routing,以及费用的困境 这时,我们发现了一线希望,那就是 Cloudflare 的 Argo Smart Routing 功能。启用此功能后,它会将访问者连接到离他们最近的 Cloudflare 区域。也就是说,韩国用户会被连接到韩国区域。
2. 애증의 클라우드플레어 재도입
这解决了速度问题,但带来了更大的烦恼,那就是流量费用。“Argo Smart Routing”的基础费用是每月 5 美元,每 GB 额外收取 0.1 美元。在 Wikidocs 流量大的日子里,一天可能会产生 100GB 的流量。 简单计算,一天 10 美元,一个月就是 300 美元(约合 45 万韩元)。而且,在 AI 时代,如果机器人横行,会产生更多的流量,而“Argo Smart Routing”对于像 Wikidocs 这样的小型网站来说,确实是一个难以承受的功能。更何况,由于 Argo 提升了速度,全球的 AI 机器人可能会以更快的速度访问,成为“真正的‘美食店’”。 5. 域名分离作战:wikidocs-cdn.net 在这样的矛盾中思考时,我们制定了一个策略,将 Wikidocs 的主要流量——静态文件和图片文件——迁移到 Cloudflare 的 R2 进行服务,以此来分担流量。 一开始,我们尝试使用 `static.wikidocs.net` 连接到 R2,但“Argo”是按域名收费的,所以这也被视为同等流量,导致了费用爆炸。所以,我们新购买了一个名为 `wikidocs-cdn.net` 的域名并连接到 R2。通过这样完全分离域名,“Argo”就不会对 `wikidocs-cdn.net` 的流量收费了。

然而,又出了问题。这次不是什么大问题,但却是一个相当令人烦恼的问题。将静态文件和图片连接到 R2 并通过 `wikidocs-cdn.net` 提供服务后,Cloudflare 老生常谈的速度问题又出现了。当然,静态文件可以应用缓存,但这并不是一个完美的解决方案。由于各种原因,我们对速度问题并不满意。 6. 最终解决方案:构建混合式 CDN 于是,我们放弃了 R2 服务,将 `wikidocs-cdn.net` 重新连接到 Wikidocs 服务器,通过 Nginx 专门为静态文件和图片提供服务,像自建 CDN 一样。 终于,我们拥有了一个速度满意且能有效处理 AI 机器人的网站。不过,这带来了 Cloudflare Pro、“Argo Smart Routing”以及额外购买域名的费用。虽然通过分离静态文件和图片减少了 Argo 的收费,但这部分还需要持续观察。 随着 AI 时代的到来,内容提供网站也必须承担机器人流量的费用了。 ㅜㅜ 目前急需解决的问题已经解决,所以我们要好好经营服务,不辜负这些安全投入。 感谢阅读长文!
3. 보안은 해결했지만, 속도가 문제
큰 문제가 해결되었지만 또 다른 큰 문제가 생겼습니다. 바로 '속도' 문제입니다. 클라우드플레어 한국 리전이 있지만 한국의 망 사용료가 비싸다는 이유로 엔터프라이즈 급이 아닌 이상 절대로 한국 리전으로 붙여주지 않더군요. 그래서 브라우저로 위키독스에 접속하려면 멀쩡하게 가까이 있는 한국 리전 대신 미국이나 망 이용료가 싼 곳으로 왔다 갔다 하게 만들어, 처참한 속도를 감수해야만 했습니다.
4. 구원투수 Argo Smart Routing, 그리고 비용의 딜레마
그때 한 줄기 희망을 발견했습니다. 바로 클라우드플레어의 Argo Smart Routing 기능입니다. 이 기능을 켜면 접속자가 위치한 가장 가까운 클라우드플레어 리전으로 연결해 줍니다. 즉, 한국 사람은 한국 리전으로 연결해 주는 것입니다.

이걸로 속도 문제는 해결되었지만, 더 큰 고민이 찾아왔습니다. 그것은 바로 트래픽 비용입니다. "Argo Smart Routing"은 월 5달러 기본에, 1GB당 0.1달러씩 과금이 됩니다. 위키독스가 바쁜 날에는 하루에 100GB 정도 트래픽이 발생하기도 합니다. 단순 계산으로 하루에 10달러, 한 달이면 300달러(약 45만 원)가 나옵니다. 더구나 AI 시대에 봇들이 활개 치면 더 많은 트래픽이 발생하게 될 것이고, "Argo Smart Routing"은 위키독스 같은 작은 규모의 사이트가 감내하기에는 정말 벅찬 기능인 것입니다. 게다가 Argo 덕분에 속도가 빨라지면 전 세계에 분포한 AI 봇들이 더욱 빠른 속도로 접속하게 되어 '진정한 맛집'이 될 수도 있고요.
5. 도메인 분리 작전: wikidocs-cdn.net
이러한 아이러니 속에서 고민하던 중, 위키독스의 주요 트래픽인 정적 파일과 이미지 파일들을 클라우드플레어의 R2로 옮겨 서비스하여 트래픽을 분담하는 작전을 세우게 되었습니다. 처음에 `static.wikidocs.net`을 사용하여 R2와 연결시키려고 했는데, "Argo"는 도메인 단위의 과금이어서 이 또한 동일 트래픽으로 간주되어 요금 폭탄을 맞게 됩니다. 그래서 `wikidocs-cdn.net`이라는 도메인을 새로 구입하여 R2와 연결했습니다. 이렇게 아예 도메인을 분리해 버리면 "Argo"는 `wikidocs-cdn.net` 트래픽에 대해서는 과금하지 않게 되니까요.

하지만 또 문제가 생겼습니다. 이번에는 아주 큰 문제는 아니지만 꽤 신경 쓰일만한 문제였습니다. 정적 파일과 이미지들을 R2에 연결하여 `wikidocs-cdn.net`으로 서비스했더니, 클라우드플레어의 고질 문제인 속도 문제가 또 발생한 것입니다. 물론 정적 파일들에 캐시를 적용할 수는 있지만, 완벽한 해결책이 아니었습니다. 여러 가지 이유로 속도 문제에 만족하지 못하게 된 상황이 된 것이죠.
6. 최종 해결: 하이브리드 방식의 CDN 구축
그래서 R2 서비스를 쓰지 않고, `wikidocs-cdn.net`을 다시 위키독스 서버에 물려 Nginx로 정적 파일과 이미지만 서비스하는 자체 CDN 비슷하게 만들었습니다. 드디어, 속도도 만족스럽고 AI 봇들도 적절히 처리할 수 있는 사이트가 되었습니다. 다만 클라우드플레어 프로, "Argo Smart Routing", 추가 도메인 구입 등의 비용이 발생하게 되었습니다. 정적 파일과 이미지들을 분리하여 Argo 과금을 줄였지만, 이 부분은 지속적으로 관찰해야 할 것 같습니다. AI 시대가 되면서 콘텐츠 제공하는 사이트들은 봇 트래픽 비용까지 감당해야 하는 세상이 왔네요. ㅜㅜ 일단 급한 불은 껐으니, 보안 비용 아깝지 않게 서비스를 잘 가꾸어 나가야겠습니다. 긴 글 읽어주셔서 감사합니다.
"运营者辛苦了!AI 机器人攻击真是头疼,但能看到你们积极应对并找到解决方案,感觉网站的未来很有希望!"
#有趣暂无评论