如何配置Nginx防止CC攻击?

Nginx

1 前言

一个问题,一篇文章,一出故事。
笔者今天早上发现站点无法打开,经查Nginx有大量的如下日志。

38.134.40.117 - - [03/Sep/2025:02:25:17 +0800] "GET / HTTP/1.1" 301 162 "-" "Go-http-client/1.1" "-"
38.134.40.117 - - [03/Sep/2025:02:37:48 +0800] "GET / HTTP/1.1" 301 162 "-" "Go-http-client/1.1" "-"
38.134.40.117 - - [03/Sep/2025:02:37:49 +0800] "GET / HTTP/1.1" 200 10860 "-" "Go-http-client/1.1" "38.134.40.117"
#...
38.134.40.117 - - [03/Sep/2025:02:40:18 +0800] "GET /config.js HTTP/1.1" 499 0 "http://www.cmdschool.cn/config.js" "Go-http-client/1.1" "-"
38.134.40.117 - - [03/Sep/2025:02:43:19 +0800] "GET /config.js HTTP/1.1" 499 0 "http://www.cmdschool.com/config.js" "Go-http-client/1.1" "38.134.40.117"

攻击者持续使用UA工具“Go-http-client”以每秒几百次的高频请求站点,进行攻击使得服务器磁盘IO持续飙升,影响站点的持续服务。

2 最佳实践

2.1 确保存在引用配置

cat /etc/nginx/nginx.conf

需要确保有如下配置,

http {
    #...
    include /etc/nginx/conf.d/*.conf;
}

2.2 配置限制请求模块

2.2.1 创建配置

vim /etc/nginx/conf.d/www.cmdschool.org_443.conf

加入如下配置,

limit_req_zone $binary_remote_addr zone=www.cmdschool.org_req:10m rate=1r/s;

server {
    listen 0.0.0.0:443 ssl;
    server_name www.cmdschool.org;
    #...

    location / {
        limit_req zone=www.cmdschool.org_req burst=5 nodelay;
        proxy_pass               https://127.0.0.1;
        #...
    }

}

需要注意的是,

  • 参数“rate=1r/s”设置每个IP地址每秒允许1个请求。
  • 参数“burst=5”设置允许突发流量,最多可以在短时间内处理5个请求。

2.2.2 测试配置语法

nginx -t

2.2.3 重载服务使配置生效

systemctl reload nginx

2.3 配置限制连接模块

2.3.1 创建配置

vim /etc/nginx/conf.d/www.cmdschool.org_443.conf

加入如下配置,

limit_conn_zone $binary_remote_addr zone=www.cmdschool.org_addr:10m;

server {
    listen 0.0.0.0:443 ssl;
    server_name www.cmdschool.org;
    #...

    location / {
        limit_conn www.cmdschool.org_addr 10;
        proxy_pass               https://127.0.0.1;
        #...
    }

}

需要注意的是,

  • 参数“limit_conn addr 10”设置限制每个IP地址最多10个连接。

2.3.2 测试配置语法

nginx -t

2.3.3 重载服务使配置生效

systemctl reload nginx
没有评论

发表回复

Nginx
如何部署Nginx集群管理工具nginxtool?

1 前言 一个问题,一篇文章,一出故事。 笔者公司内部有基于Anycase部署的Nginx负载均衡器 …

Docker
如何部署Docker Nginx 1.20.2?

1 前言 一个问题,一篇文章,一出故事。 本章将完成Docker Nginx的基础部署。 2 最佳实 …

Docker
如何打包Docker Nginx 1.20.2?

1 前言 一个问题,一篇文章,一出故事。 由于docker hub原版本的nginx镜像过于精简,于 …