0

0

Nginx 抵御 CC 攻击的限流模块配置(limit_req/limit_conn)

煙雲

煙雲

发布时间:2025-07-02 11:48:02

|

908人浏览过

|

来源于php中文网

原创

nginx抵御cc攻击的核心在于限制请求速率和并发连接数。1. 使用limit_req模块控制请求速率,如每秒每个ip最多1个请求;2. 使用limit_conn模块限制并发连接数,如单ip最大10个连接;3. 可结合burst参数允许突发流量,并通过nodelay控制拒绝策略;4. 可针对特定url或用户代理进行更细粒度的限制;5. 通过error_page自定义限流后的错误页面;6. 调整参数时需结合基线测试、逐步优化并考虑用户体验;7. 配合waf、验证码、cdn、黑名单等手段增强防护;8. 利用nginx日志、stub_status模块及第三方工具监控限流效果并持续优化配置

Nginx 抵御 CC 攻击的限流模块配置(limit_req/limit_conn)

Nginx 抵御 CC 攻击,核心在于限制请求速率和并发连接数。limit_req 控制请求速率,limit_conn 控制并发连接数。两者结合,能在一定程度上缓解 CC 攻击带来的压力。

解决方案

配置 Nginx 抵御 CC 攻击,主要通过 limit_reqlimit_conn 模块来实现。以下是一个基本的配置示例,并附带详细解释:

  1. 定义共享内存区域:

    http {
        limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
        limit_conn_zone $binary_remote_addr zone=connlimit:10m;
    }
    • limit_req_zone: 定义一个名为 mylimit 的共享内存区域,大小为 10MB。$binary_remote_addr 作为 key,表示基于客户端 IP 地址进行限制。rate=1r/s 表示允许每个 IP 地址每秒最多发起 1 个请求。
    • limit_conn_zone: 定义一个名为 connlimit 的共享内存区域,大小为 10MB。同样使用 $binary_remote_addr 作为 key,用于限制单个 IP 的并发连接数。
  2. 应用限制规则:

    server {
        location / {
            limit_req zone=mylimit burst=5 nodelay;
            limit_conn connlimit 10;
            # 其他配置...
        }
    }
    • limit_req zone=mylimit burst=5 nodelay;: 对 / 路径应用 mylimit 区域定义的限制规则。burst=5 允许客户端在超过速率限制时,最多可以有 5 个请求被缓冲(突发流量)。nodelay 表示超过 burst 值的请求立即被拒绝。如果不加 nodelay,Nginx 会尝试延迟处理这些请求,可能会消耗更多资源。
    • limit_conn connlimit 10;: 限制单个 IP 地址到 / 路径的并发连接数为 10。
  3. 更细粒度的控制 (可选):

    可以针对特定的 URL 或用户代理进行更细粒度的限制。例如,针对 POST 请求进行更严格的限制:

    location /api/ {
        limit_req zone=mylimit burst=2 nodelay;
        limit_conn connlimit 5;
        # 其他配置...
    }
  4. 处理被限制的请求:

    默认情况下,被限制的请求会返回 503 Service Unavailable 错误。可以通过 error_page 指令自定义错误页面:

    error_page 503 /503.html;
    location = /503.html {
        root /usr/share/nginx/html;
        internal;
    }

    这会将 503 错误重定向到自定义的 /503.html 页面。internal 指令确保该页面只能通过内部重定向访问。

如何根据业务调整 limit_req 和 limit_conn 的值?

调整 limit_reqlimit_conn 的值需要结合实际业务情况进行。过低的限制会导致正常用户受到影响,过高的限制则无法有效防御 CC 攻击。

  1. 基线测试: 在正常流量情况下,监控 Nginx 的请求速率和并发连接数。可以使用 Nginx 的 stub_status 模块或者第三方监控工具(如 Prometheus + Grafana)来收集数据。

    location /nginx_status {
        stub_status;
        allow 127.0.0.1;
        deny all;
    }

    访问 /nginx_status 可以查看当前的活动连接数、请求速率等信息。

  2. 逐步调整: 根据基线测试的结果,逐步增加 limit_reqlimit_conn 的值,同时持续监控服务器的性能。

  3. 观察错误率: 监控 Nginx 的 503 错误率。如果错误率过高,说明限制过于严格,需要适当放宽限制。

  4. 动态调整: 使用 Nginx Plus 可以实现动态调整 limit_reqlimit_conn 的值,无需重启 Nginx。这在应对突发流量或攻击时非常有用。

    What-the-Diff
    What-the-Diff

    检查请求差异,自动生成更改描述

    下载
  5. 考虑用户体验: 在设置限制规则时,需要考虑到正常用户的体验。可以针对不同的用户群体设置不同的限制规则。例如,对于登录用户,可以放宽限制;对于未登录用户,可以设置更严格的限制。

除了 limit_req 和 limit_conn,还有哪些方法可以防御 CC 攻击?

除了 limit_reqlimit_conn,还有其他一些方法可以防御 CC 攻击:

  1. Web 应用防火墙 (WAF): WAF 可以检测和过滤恶意请求,例如 SQL 注入、跨站脚本攻击 (XSS) 等。一些 WAF 也具有 CC 防护功能。

  2. 验证码 (CAPTCHA): 在关键页面(例如登录页面、注册页面)添加验证码,可以有效防止机器人攻击。

  3. JavaScript 挑战: 使用 JavaScript 挑战来验证客户端是否是真实的浏览器。这可以有效防止一些简单的 CC 攻击。

  4. HTTP/2 和 HTTP/3 的支持: HTTP/2 和 HTTP/3 协议具有更好的性能和安全性,可以有效缓解 CC 攻击带来的压力。

  5. CDN (内容分发网络): CDN 可以将网站的内容缓存到全球各地的节点,从而减轻源服务器的压力。

  6. 黑名单和白名单: 根据 IP 地址、用户代理等信息,设置黑名单和白名单,可以有效阻止恶意请求。

  7. 使用 rate limiting 的第三方服务: 像 Cloudflare 这样的服务提供了强大的 rate limiting 功能,可以根据各种规则来限制请求速率。

如何监控和分析 Nginx 的限流效果?

监控和分析 Nginx 的限流效果对于优化配置至关重要。以下是一些常用的方法:

  1. Nginx 日志: 分析 Nginx 的访问日志,可以了解请求速率、错误率等信息。可以使用工具(例如 awkgrep)来提取相关数据。

  2. Nginx Plus 的实时监控: Nginx Plus 提供了实时监控功能,可以查看当前的请求速率、错误率、连接数等信息。

  3. 第三方监控工具: 使用 Prometheus + Grafana、Datadog 等第三方监控工具,可以更全面地监控 Nginx 的性能。

  4. 自定义指标: 可以使用 Nginx 的 ngx_http_stub_status_module 模块或者 ngx_http_lua_module 模块来收集自定义指标,例如被限制的请求数量、平均响应时间等。

  5. 日志分析工具: 使用像 ELK Stack (Elasticsearch, Logstash, Kibana) 这样的日志分析工具,可以对 Nginx 日志进行更深入的分析,发现潜在的问题。

通过持续监控和分析 Nginx 的限流效果,可以及时发现问题并进行优化,从而更好地防御 CC 攻击。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

1133

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

381

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2152

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

380

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1663

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

585

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

440

2024.04.29

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

nginx浅谈
nginx浅谈

共15课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号