有些个人博客屏蔽海外IP访问,是不是懒?
缘由
访问一些个人博客网站时,时不时遇到提示禁止访问,或者有些是能够打开第一个页面,再打开另一个页面就提示禁止访问,只因我有时候启用了代理。遇到这种情况时,总会令我感到不适。有时候我回给站长发个邮件反馈一下,有时候就默默关掉网页,拉黑网址。
我理解个人站长面对爬虫、攻击、垃圾评论和有限预算时的无奈。对很多小站而言,屏蔽境外IP确实是一种成本最低、见效最快的方案。但也让一部分真实读者如海外华人、旅行中的用户、跨境网络环境中的访问者等被一起挡在门外。
我始终认为,博客就应该注重开放、分享、交流的精神。问题并不在于该不该防,而在于是否存在更细粒度的方式,可能比一刀切更友好。
应对之道
我所想到的办法,大概有以下几个方面。
1. 用好CDN
常见的诸如:静态资源缓存、HTML页面缓存、RSS结果缓存。我通过CloudFlare的缓存配置,基本上80%的访问流量都能命中缓存,而不用走到源服务器。
2. 动态页面缓存
动态博客最怕每次访问都跑数据库,一个优化办法就是生成静态缓存,对服务器压力有很大的改善效果,WP/TP都有这方面的插件。
3. 图片压缩
我友链里面有些网站,一个LOGO图片就大几百KB,我都惊呆了,所以我一律自己压缩替换了,几乎没有10KB以上的,缩减几倍至几十倍。图床或CDN可能有自动优化图片的功能,如果没有,那就自己后台对图片进行压缩。
4. 限速
其实你需要的不是封国家和地区,而是封异常行为。例如针对同一IP,1分钟限制100个请求,超过限制,就可以请求机器人验证或者暂停访问一段时间。
5. 人机验证
就是很多人熟悉的“我不是机器人(I'm not a robot)”页面。主要针对高频访问,奇奇怪怪的User-Agent等。可以使用诸如Cloudflare Turnstile的服务。
6. 妥善配置robots.txt
现在博客最耗资源的往往不是 Google,而是各种AI爬虫、自动镜像采集程序,妥善配置robots.txt可以防一部分君子爬虫,最好也配置WAF拦截已知Bot。不过一个个配置挺麻烦的,CF提供的一键配置就很方便了。
7. 评论系统防护
垃圾评论是老问题,也是可以通过技术手段优化,大大减少垃圾评论。比如改变普通的<form>表单提交评论的方式,改为根据交互用js/ajax提交。评论内容的垃圾判断,如果简单的关键字过滤不够用,可以用更高级的ai识别,我记得obaby就发过ai垃圾评论识别插件。我个人不推荐无条件的评论审核,更不赞同关闭评论。
8. 用静态博客
能够舍弃一部分灵活性,就可以改用静态博客,如果再把静态博客部署与免费平台上(诸如Github),那就省钱又省心了。缺点就是国内这样的赛博菩萨比较稀缺,貌似腾讯有个EdgeOne。静态博客要加入评论功能也不难,有现成的第三方评论服务如Waline、Valine等。
总结
GeoIP封锁当然有效,因为它简单。但简单不一定是最优解。今天的CDN、WAF、缓存、限流和评论风控等技术手段,已经足以让很多个人博客在不封锁境外访问的情况下,维持可接受的安全与成本。
与其把问题定义为海外IP风险更高,不如把目标重新定义成如何更精准地识别异常流量,而不误伤正常读者。
如果一个博客最终只能被正确国家的人看到,那么它也部分失去了互联网分享的意义。我希望站长能够能者多劳,多花一点点精力,给读者多一点点便利。