nginx怎么防ddos攻击

发布时间 - 2019-06-06 00:00:00    点击率:

防御ddos是一个系统工程,攻击花样多,防御的成本高瓶颈多,防御起来即被动又无奈。ddos的特点是分布式,针对带宽和服务攻击,也就 是四层流量攻击和七层应用攻击,相应的防御瓶颈四层在带宽,七层的多在架构的吞吐量。对于七层的应用攻击,我们还是可以做一些配置来防御的。

例如前端是Nginx,主要使用nginx的http_limit_conn和http_limit_req模块来防御。 ngx_http_limit_conn_module 可以限制单个IP的连接数,ngx_http_limit_req_module可以限制单个IP每秒请求数,通过限制连接数和请求数能相对有效的防御CC攻击。

下面是配置方法:

限制每秒请求数 
ngx_http_limit_req_module模块通过漏桶原理来限制单位时间内的请求数,一旦单位时间内请求数超过限制,就会返回503错误。配置需要在两个地方设置:

nginx.conf的http段内定义触发条件,可以有多个条件 
在location内定义达到触发条件时nginx所要执行的动作 
例如:

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/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=10r/s;     限制频率为每秒10个请求
burst=5         允许超过频率限制的请求数不多于5个,假设1、2、3、4秒请求为每秒9个,那么第5秒内请求15个是允许的,反之,如果第一秒内请求15个,会将5个请求放到第二秒,第二秒内超过10的请求直接503,类似多秒内平均速率限制。
nodelay         超过的请求不被延迟处理,设置后15个请求在1秒内处理。

限制IP连接数 
ngx_http_limit_conn_module的配置方法和参数与http_limit_req模块很像,参数少,要简单很多

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

更多Nginx相关技术文章,请访问Nginx使用教程栏目进行学习!


# nginx  # 架构  # 分布式  # location  # http  # ddos  # 七层  # 连接数  # 时间内  # 四层  # 是一个  # 就会  # 也就  # 多个  # 不被  # 所要 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: nginx修改上传文件大小限制的方法  Laravel如何为API生成Swagger或OpenAPI文档  Internet Explorer官网直接进入 IE浏览器在线体验版网址  Laravel如何使用Gate和Policy进行授权?(权限控制)  如何在 Pandas 中基于一列条件计算另一列的分组均值  详解Huffman编码算法之Java实现  如何在腾讯云服务器快速搭建个人网站?  大同网页,大同瑞慈医院官网?  青岛网站建设如何选择本地服务器?  javascript中的try catch异常捕获机制用法分析  使用Dockerfile构建java web环境  无锡营销型网站制作公司,无锡网选车牌流程?  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  如何用PHP快速搭建高效网站?分步指南  如何自定义建站之星网站的导航菜单样式?  如何破解联通资金短缺导致的基站建设难题?  香港服务器租用每月最低只需15元?  高防服务器租用指南:配置选择与快速部署攻略  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  如何选择可靠的免备案建站服务器?  Python自动化办公教程_ExcelWordPDF批量处理案例  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  如何获取免费开源的自助建站系统源码?  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  如何快速查询域名建站关键信息?  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  如何用西部建站助手快速创建专业网站?  jQuery 常见小例汇总  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  如何用虚拟主机快速搭建网站?详细步骤解析  Laravel如何为API编写文档_Laravel API文档生成与维护方法  如何在服务器上三步完成建站并提升流量?  JavaScript如何实现倒计时_时间函数如何精确控制  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  网站制作大概多少钱一个,做一个平台网站大概多少钱?  详解CentOS6.5 安装 MySQL5.1.71的方法  高端智能建站公司优选:品牌定制与SEO优化一站式服务  如何快速登录WAP自助建站平台?  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  如何快速选择适合个人网站的云服务器配置?  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  如何在建站宝盒中设置产品搜索功能?  C++时间戳转换成日期时间的步骤和示例代码  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  如何在阿里云虚拟主机上快速搭建个人网站?