内容提要
独立开发者阿小信回顾近三周工作:主要精力投入反爬虫与垃圾流量治理,因免费版Cloudflare限制较多,遂自建质询与分层拦截系统;重构多语言系统,采用按语言分表解决百万级MySQL全文检索缓慢问题;优化日志与服务器性能以避免宕机。AI搜索与爬虫加剧流量压力,广告收入不稳。他感慨自由职业虽时间自由,却常主动加班,收入仍难覆盖支出。
延伸解读
免费版 Cloudflare 的隐性代价
作者使用免费版 Cloudflare 时,遇到 WAF 规则数量、IP 列表容量等硬性限制,被迫直接封禁可疑 IP,结果误伤真实用户,导致流量和 SEO 排名下跌。更严重的是,一键屏蔽 AI 爬虫默认连带屏蔽搜索引擎,造成收录损失。这提醒依赖免费安全服务的个人站长:免费方案的功能边界可能以牺牲正常流量为代价,需仔细核对默认配置,并定期验证拦截效果。
自建防护系统的维护负担
作者分阶段自建质询与分层拦截系统,虽然提升了抗压能力,但也暴露出新问题:无限重定向、验证绕过、多服务器架构下每个功能需维护多个版本。安全防护从配置规则变成持续观察、识别、拦截、验证的系统工程。对独立开发者而言,自建方案能突破免费限制,但必须评估长期维护成本,尤其是当网站部署在国内外不同反向代理上时,版本碎片化会显著增加工作量。
百万级 MySQL 全文检索的务实取舍
在 2 核 8GB 服务器上,单表 197 万行的 MySQL 全文检索查询耗时 40 秒以上,排查发现瓶颈是内存不足导致频繁页换页,而非 CPU 或磁盘 IO。作者最终采用按语言分表,将单表数据量降至约 1/17,查询速度提升约 100 倍,并针对拉丁文和 CJK 使用不同分词器。这说明在资源受限时,架构层面的数据拆分比调参更有效,但也需接受代码重构和 Fallback 逻辑的额外成本。
AI 时代小网站的流量悖论
作者观察到 AI 搜索普及后,用户可能直接获得答案而不再访问原网站,但 AI 抓取内容又给网站带来大量爬虫请求,挤占服务器资源却不产生真实广告收入。为保留被 AI 提及的机会,又不能一刀切屏蔽所有 AI 爬虫。这种“流量增加但收入不增”的困境,迫使作者在无法升级服务器的情况下,转向优化代码和考虑静态化架构。对小网站运营者而言,需重新评估流量质量与变现路径的关系。
Q&A
为什么作者决定自己造一个类似 Cloudflare 的防护系统?
因为免费版 Cloudflare 限制太多:WAF 规则最多只能配 5 条且有长度限制,可疑 IP 列表只有一个且最多放 1 万条;AI 爬虫一键屏蔽会误伤搜索引擎导致 SEO 流量下跌;部分爬虫能绕过质询穿透到源站;对行为异常的流量识别不足。最终服务器被打挂,促使他自建质询与分层拦截系统。
作者自建的防护系统分为哪几个阶段?
共四个阶段:第一阶段自定义质询,用离线脚本分析日志识别异常 IP,Web 中间件要求可疑 IP 完成验证挑战;第二阶段分层拦截,Cloudflare WAF 作第一层,确定性恶意 IP 在 Nginx/Caddy 反向代理层禁止,不确定的进入业务层质询;第三阶段本地规则引擎,把 Cloudflare 部分安全规则能力迁移到本地,支持 IP 列表和表达式质询且不限量;第四阶段持续完善,解决无限重定向、绕过验证、精准识别异常 IP 等问题。
MySQL 全文检索在百万级数据量下为什么慢,作者怎么解决的?
单表最大 197 万行、唯一 Token 数 257 万,在 2 核 8GB 服务器上部分查询要 40–45 秒。排查发现内存 90% 导致 InnoDB 频繁 page eviction,CPU 在等内存 IO,而 8GB 已是承受上限。最终采用按语言分表方案,单表数据量降至约 1/17,数据返回速度提升约 100 倍,拉丁文和 CJK 还能分别用不同分词器减小索引体积。
10 月 25 日服务器宕机是什么原因造成的?
不是垃圾流量突破防护,而是作者自己写的离线日志分析脚本。由于请求量巨大,单日日志文件最小近 700MB,分析程序处理日志时把资源耗光,导致服务器宕机约 80 分钟。
作者如何优化日志分析脚本的性能?
把全量读取日志改为流式处理,避免一次性加载大量数据;将按天滚动的日志改为按大小滚动,每次分析前先滚动一次;重写 IP 分析脚本降低复杂度、提高自动化;测试发现 Python str.startswith() 传入 tuple 性能更好。优化后原来 40 秒的任务现在秒速完成。
AI 搜索和 AI 爬虫对小网站生存环境有什么影响?
AI 搜索普及后用户直接问 AI 获取答案,可能不再访问原网站,抢走了部分流量;但 AI 生成答案前又需要大量抓取内容,给网站带来更多爬虫请求却不一定带来真实访问。为了有机会被 AI 提及又不能一刀切屏蔽所有 AI 爬虫,只能靠升级服务器或优化代码来承接,作者没钱升级只能选择优化代码。
作者对自由职业的状态有什么感慨?
自由职业确实不用上班,但不上班不代表不用干活。时间自由,可以在工作日去医院、逛超市、骑车,也可以凌晨四五点还在折腾服务器;但没有人要求上下班,自己反而成了最不愿意让自己下班的人。忙了很久做的多是不直接赚钱的事,收入仍难覆盖支出,今年大概率入不敷出。