专栏首页晓月寒·nginx通过配置防止DDoS攻击

nginx通过配置防止DDoS攻击

nginx通过配置防止DDoS攻击

什么是DDoS攻击

DDoS攻击是Distributed Denial of Service的缩写,翻译成中文就是分布式拒绝服务。即不法黑客组织通过控制服务器等资源,发动对包括国家骨干网络、重要网络设施、政企或个人网站在内的互联网上任一目标的攻击,致使目标服务器断网,最终停止提供服务。

举个栗子,我开了一家店生意很好,隔壁邻居看不下去了叫他的七大姑八大姨每天都到我的店里来占着位置却不买东西,这样我的生意自然就不行了。也就是攻击者利用“肉鸡”对目标网站在较短的时间内发起大量请求,大规模消耗目标网站的主机资源,让它无法正常服务。在线游戏、互联网金融等领域是 DDoS 攻击的高发行业。

如何应对DDoS攻击

防止DDoS攻击有很多种方法,比如使用高防服务器、CDN加速、DDoS清洗等。但是由于经费的限制,我们整不起那些个高大上的玩意,所以只能在我们现有的材料上加工加工来达到应对DDoS攻击的目的。

nginx防止DDoS攻击

限制每秒的请求数

ngx_http_limit_req_module模块通过漏桶原理来限制单位时间内的请求数,一旦单位时间内请求数超过限制就会返回503错误。

在nginx.conf中新增如下配置:

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=100r/s; //触发条件,所有访问ip 限制每秒10个请求
    ...
    server {
        ...
        location  ~ \.php$ {
            limit_req zone=one burst=5 nodelay;   //执行的动作,通过zone名字对应
               }
           }
     }

以上配置用到的一些参数:

参数

含义

$binary_remote_addr

二进制远程地址

zone=one:10m

定义zone名字叫one,并为这个zone分配10M内存,用来存储会话(二进制远程地址),1m内存可以保存16000会话

rate=100r/s

限制频率为每秒100个请求

burst=5

允许超过频率限制的请求数不多于5个,假设1、2、3、4秒请求为每秒9个,那么第5秒内请求15个是允许的,反之,如果第一秒内请求15个,会将5个请求放到第二秒,第二秒内超过10的请求直接503,类似多秒内平均速率限制。

nodelay

超过的请求不被延迟处理,设置后15个请求在1秒内处理。

由于使用的是漏桶原理,所以其实这个配置不止能用来防止DDoS攻击,还能用作服务器的限流。

限制单个IP的连接数

ngx_http_limit_conn_module模块可以用来限制单个IP的连接数,配置如下:

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m; //触发条件
    ...
    server {
        ...
        location /download/ {
            limit_conn addr 2;    // 限制同一时间内2个连接,超出的连接返回503
                }
           }
     }

通过简单的配置使我们的服务能够过滤掉一些DDoS攻击,但是在专业的黑客面前这些确实都只能算是小菜,想要真正提高服务器的抗压能力,还是得使用专业的工具。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用docker-compose对分布式docker项目进行统一部署

    Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。如果你的项目中已经有很多docker启...

    我的小熊不见了丶
  • Spring Boot实战-使用WebFlux进行响应式编程(2)

    以上代码使用Map完成了关于用户的增删改查操作。这也是我们在项目中运用最多的操作。如果只是想要在完成时给出完成信号,就可以使用 Mono<Void>。 接下来...

    我的小熊不见了丶
  • Spring Boot实战-docker部署项目

    其中的${docker.image.prefix}需要我们在pom.xml中的properties节点中定义,用于作为docker镜像的名字。

    我的小熊不见了丶
  • [Linux] ubuntu下yarn依赖管理工具的安装和使用

    Yarn 对你的代码来说是一个包管理器, 你可以通过它使用全世界开发者的代码, 或者分享自己的代码。Yarn 做这些快捷、安全、可靠,所以你不用担心什么。 通过...

    陶士涵
  • spark 在yarn执行job时一直抱0.0.0.0:8030错误

    近日新写完的spark任务放到yarn上面执行时,在yarn的slave节点中一直看到报错日志:连接不到0.0.0.0:8030 。 1 The logs ar...

    随机来个数
  • 注意:DateTimePicker.Text不靠谱

    获取时:在DateTimePicker.ValueChanged事件中,获取到的Text有可能是string.Empty!!!,特别当ValueChanged事...

    AhDung
  • 一口(很长的)气掌握mongodb基本操作nosql介绍安装mongodb库操作集合操作文档操作数据类型查询进阶聚合索引用户权限管理

    nosql,全称是 not only sql, 即“不仅于sql”,相较于关系型数据库,nosql更加灵活,无需去维护复杂的数据关系。数据是json格式,更加直...

    章鱼喵
  • 【译】使用Apache的mod重写来保护你的C2 Empire

    背景 伴随着维基红色团队基础架构(Red Team Infrastructure Wiki)的发布,今年圣诞节早早来临。 它在Jeff Dimmock和Stev...

    安恒网络空间安全讲武堂
  • Django源码学习-13-HttpResponse

    Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(...

    小团子
  • CentOS7-firewall防火墙使用 原

    红帽RHEL7系统已经用firewalld服务替代了iptables服务,新的防火墙管理命令firewall-cmd与图形化工具firewall-config。...

    拓荒者

扫码关注云+社区

领取腾讯云代金券