Nginx 444 状态码,应对网站流量攻击的恶意请求

文章目录

    今天,网站受到的流量攻击还在持续。依旧是海量的广东 IP 请求,没有任何规律。参考前文:

    网站七牛 CDN 流量被刷,差点破产

    尝试了 Nginx 返回两种状态码,但是都没有效果,攻击请求依旧:

    • 403 Forbidden: 明确表示请求权限被拒绝
    • 502:暗示我的服务已经挂了,大爷饶命

    无奈╮(╯▽╰)╭,都没有用。这个刷流量的攻击方,既不是来爬内容的,也不是想把你网站拖垮,就是纯粹地刷流量。根本不在乎你返回啥。某书上有个大佬分析是部分 CDN 提供商实际是黑产,需要伪造流量,所以狂刷数据。下图是七牛云 CDN 的请求数统计,目前只能止住 CDN 的消耗,但是服务器源站的请求还在继续:

    七牛云 CDN 请求数统计

    所以,干脆 Nginx 啥也不返回行不行。感觉返回 502 错误页的流量都是浪费带宽,毕竟国内服务器带宽贵如金。

    Nginx 444 状态码

    444 状态码是 nginx 自己定义的,不在标准HTTP状态码范围内。它的核心含义是:

    Nginx 服务器主动关闭连接,不向客户端发送任何响应。

    相比返回一个完整的错误页面(如 403 或 404, 502),直接关闭连接消耗的服务器资源(CPU、内存、带宽)更少,尤其是在面对大量无效或恶意请求时。甚好,非常符合我的需求。

    Nginx 配置示例

    # 在 server 或 http 块中
    if ($http_user_agent ~* (BadBot|Scanner|Spammer)) {
        return 444;
    }
    

    reload Nginx 配置

    确认配置文件格式正确,并 reload Nginx 配置,使 444 状态码的配置生效。

    sudo nginx -t
    sudo nginx -s reload
    

    😮‍💨,感觉搞服务器有时候不能有精神洁癖,被攻击就被攻击吧,只要服务器负载没有问题,你刷你的。
    我也不纠结了。后面了解一下网友推荐的雷池 WAF,或者阿里云 ESA。由于服务器和域名都在阿里云,不想尝试腾讯的 EdgeOne 了。

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式