国庆假期处理的第二例网站服务器被刷流量,导致 Linode Server 宕机

更新日期: 2025-10-07 阅读次数: 15 字数: 1035 分类: 服务器

国庆第一天,刚处理了国内的阿里云个人博客服务器被刷爆带宽。 而国庆第五天,一大早就收到海外的一个网站服务器(Linode Server)的宕机通知邮件。

早上一起床就赶紧登上了服务器,发现是网站服务器被刷流量,直接导致服务器负载过高,网站无法访问。

攻击流量特征

几乎全部的垃圾流量都是在刷一个站的博客列表页面,路径如下:

/latest-blog?mdrv=<xxx.com>&start=<random_number>
/latest-blog?=1&pagespeed=%27%3Fpagespeed%3D%27&start=2750
  • 正常的 mdrv 参数应该是一个六位字母的随机字符串,类似 71hp3w,但是攻击流量中 mdrv 参数值不少是 xxx.com 结尾的域名。
  • 再就是莫名其妙的 pagespeed 参数
  • 同时 URL 参数结构混乱

请求大概一秒钟几十次,一直在持续,没有停下来的意思。 观察了两天,攻击流量在减少,但是还没有停止。至少服务器负载降下来了。

Nginx 屏蔽规则

让 DeepSeek 帮忙分析了一下,给出了两个屏蔽规则:

location / {
    # 匹配 /latest-blog 路径且 mdrv 参数值包含 .com
    if ($request_uri ~* "^/latest-blog\?.*mdrv=[^&]*\.com") {
            return 444;
    }

    # 新增规则2:屏蔽 /latest-blog 路径且包含 pagespeed 参数(不区分大小写)
    if ($request_uri ~* "^/latest-blog\?.*pagespeed") {
            return 444;
    }

    try_files $uri $uri/ /index.php?$args;
}

AI 非常适合写正则表达式,反正比我写的好。

整理这篇文章,主要是为了记录 Nginx 的配置。

PHP 建站系统的尴尬之处

这个网站是一个 PHP Joomla 搭建的内容站。(Joomla 类似 WordPress)

我的体会是,通用的 php 建站系统,类似 WordPress、joomla、magento 为了通用性,页面请求的处理逻辑包含了大量的数据库联表查询。

导致一个 4 核 8G 的服务器,连处理一秒钟 100 次的请求都吃力。 而且要去做定制化缓存,也非常麻烦。

这两天刚听了 Ruby on Rails 作者的一个播客,他承认 Ruby 哪里都好,就是服务器需要多一点的成本。 PHP 也是类似的道理。我还是更喜欢 Go 来开发网站,至少不用为了性能去折腾。也能扛住这种小规模的攻击。

自己开发,也可以在参数中增加校验,例如页面参数,再增加一个校验串,防止随机页码。

为什么没有使用 Cloudflare

这个网站比较特殊,主站使用了 Cloudflare,但是为了自动支持多语言,使用了三方的翻译服务。 相当于几十种翻译,每个语种对应一个新的二级域名,每个二级域名需要解析到三方的实时翻译服务上,三方翻译服务收到正常用户的请求后,拉取对应的源站内容,实时翻译为目标语言,再返回给浏览器用户。由于需要加三方翻译服务的 IP 白名单,导致 cloudflare 的拦截失效。

而 Cloudflare 是可以识别这类攻击,自动返回 robot challenge 页面,防止恶意流量的。

蓝易云也有海外 cdn 节点

前两天发的那篇国内服务器被刷流量的公众号文章,有个专业做 CDN 的大佬恰好刷到了,就加了我微信, 推荐了他们的 CDN 服务,蓝易云,官方地址:

https://www.tsycdn.com

处理机制也跟 cloudflare 类似,在识别出攻击流量特征后,触发强制人机验证。 而且他们也遇到了国内广东大量 PCDN 刷流量的问题,也做了相应的防护。跟这位大佬交流的过程中,感觉还是专业的 CDN 服务靠谱一些,我这种个人开发者,还是不要自己折腾了。 蓝易云也有海外的 CDN 节点,可以考虑使用。

感兴趣的兄弟可以加这位大佬的 V:lanyiyun6

关于作者 🌱

我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式