转:nginx防DDOS攻击的简单配置
文章来自于:
近期由于工作需要,做了些防DDOS攻击的研究,发现nginx本身就有这方面的模块ngx_http_limit_req_module和ngx_http_limit_conn_module。
一、基本介绍
1.ngx_http_limit_req_module
配置格式及说明:
设置一个缓存区保存不同key的状态,这里的状态是指当前的过量请求数。而key是由variable指定的,是一个非空的变量,我们这里使用$binary_remote_addr,表示源IP为key值。
limit_req_zone $variable zone=name:size rate=rate;
指定要进行限制的缓存区和最大的请求到达后有多少个请求放入延迟队列(其它的直接丢弃)。如果不希望请求数达到上限而被延迟,就需要使用nodelay。
limit_req zone=name [burst=number] [nodelay];
例子:
缓存区为10M,请求限制为每秒1次,延迟队列为5

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    ...
    server {
        ...
        location /search/ {
            limit_req zone=one burst=5;
        }
}

2.ngx_http_limit_conn_module
配置格式及说明:
设置一个缓存区保存不同key的状态。我们这里使用源IP来作为key,以此限制每个源IP的链接数
limit_conn_zone $binary_remote_addr zone=addr:10m;
指定限制的缓存区,并指定每个key的链接个数
limit_conn zone number;
例子:

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    ...
    server {
        ...
        location /download/ {
            limit_conn addr 1;
        }
}

二、实际应用
如果作为代理服务器,我们需要限制每个用户的请求速度和链接数量,但是,由于一个页面有多个子资源,如果毫无选择的都进行限制,那就会出现很多不必要的麻烦,如:一个页面有40个子资源,那么如果想让一个页面完整的显示,就需要将请求速度和连接数都调整到40,以此达到不阻塞用户正常请求,而这个限制,对服务器性能影响很大,几百用户就能把一台nginx的处理性能拉下来。
所以我们需要制定哪些请求是需要进行限制的,如html页面;哪些是不需要限制的,如css、js、图片等,这样就需要通过配置对应的location进一步细化。
注:location介绍见最后附录
我们不对css、js、gif、png,jpg等进行连接限制,而对除此之外的链接进行限制

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
    ...
    server {
        ...
       location ~ .*\.(gif|png|css|js|icon)$ {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real_IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        location ~* .*\.(jpeg|jpg|JPG)$ {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real_IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #    image_filter resize 480 -;
        #    image_filter_jpeg_quality 50;
        #    image_filter_sharpen 10;
        #    image_filter_buffer 4M;
        }
        location / {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real_IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #limit
            limit_conn addr 3;
            limit_req zone=one burst=5;
        }
}

附录:Location配置简单介绍(转自http://blog.sina.com.cn/s/blog_97688f8e0100zws5.html)
转:nginx防DDOS攻击的简单配置的更多相关文章
- 防火墙防DDOS攻击的简单设置
		
#Ping洪水攻击(Ping of Death) iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s - ...
 - nginx防ddos配置
		
Nginx limit_zone与limit_req_zone (防DDOS攻击模块) http { limit_req_zone $binary_remote_addr zone=one:100m ...
 - Nginx阻止DDoS攻击的教程收集(转)(待实践)
		
DDoS估计是一个非常头痛的问题. 分布式拒绝服务攻击(DDoS)指的是通过多台机器向一个服务或者网站发送大量看似合法的数据包使其网络阻塞.资源耗尽从而不能为正常用户提供正常服务的攻击手段.随着互联网 ...
 - 简单配置vps,防ddos攻击
		
防人之心不可无. 网上总有些无聊或者有意的人.不多说了.上干货,配置vps apf防小流量ddos攻击. 对于大流量的ddos攻击, 需要机房的硬件防火墙,vps内部可能也扛不住. 1. 安装 DDo ...
 - nginx防攻击的简单配置
		
主要通过两方案来做防护,一是nginx自带模块限制请求连接数和并发数:二是筛选IP加入黑名单: 1.并发数和连接数控制的配置 nginx http配置: #请求数量控制,每秒20个 ...
 - nginx防止DDOS攻击配置
		
转自:http://www.escorm.com/archives/452 防御DDOS是一个系统工程,攻击花样多,防御的成本高瓶颈多,防御起来即被动又无奈.DDOS的特点是分布式,针对带宽和服务攻击 ...
 - iptables防DDOS攻击和CC攻击配置
		
防范DDOS攻击脚本 #防止SYN攻击 轻量级预防 iptables -N syn-flood iptables -A INPUT -p tcp –syn -j syn-flood iptables ...
 - nginx防止DDOS攻击
		
防御DDOS是一个系统工程,攻击花样多,防御的成本高瓶颈多,防御起来即被动又无奈.DDOS的特点是分布式,针对带宽和服务攻击,也就是四层流量攻击和七层应用攻击,相应的防御瓶颈四层在带宽,七层的多在架构 ...
 - 如何使用Nginx对抗DDoS攻击?
		
时不时的就有客户会被DDoS一下.很多时候攻击很简单也容易封堵,但是攻击的目标是应用的时候就更难防御.在这里云端卫士介绍一下使用Nginx作为代理过滤器来封堵一些这种攻击. Apache DDoS攻击 ...
 
随机推荐
- + (void)load和+ (void)initialize有什么用处
			
两个方法都可以进行一些类的初始化操作.其中有些小区别.+(void)load 方法只要加入了工程种,进行了编译,且.m中实现了这个方法,都会调用一次,值得注意的时没实现的子类是不会调用的,就算父类实现 ...
 - 谈NOT IN和Exists
			
表1: test001 select * from test001
 - Node.js【2】开发环境搭建(Windows、Linux&Mac)
			
安装方式有非常多种,以下仅仅是我喜欢的一种方式,安装的路径不一定要跟我一样. 眼下最新的版本号是v0.10.28 Windows 1.下载(放到E:\node\nodejs): http://node ...
 - 一种解决的方法:CGContextSaveGState: invalid context 0x0
			
遇到这个问题找了好久答案,最后排错排出来了 CGContextSaveGState: invalid context 0x0. This is a serious error. This applic ...
 - JBoss EAP6/AS7/WildFly: How to Use Properties Files Outside Your Archive--reference
			
Introduction I’d like to preface this post with, really, all properties files should be inside your ...
 - 第一篇:数据库需求与ER建模
			
前言 在数据库建设过程中,哪一步最重要?绝大多数资料会告诉你,是需求分析阶段.这一步的好坏甚至直接决定数据库项目的成败. 需求分析阶段,也被称为ER建模(entity-relationship mod ...
 - 500 OOPS: vsftpd: refusing to run with writable root inside chroot()解决方法
			
vsftpd.conf配置文件如下: [root@rusky ~]# cat /etc/vsftpd/vsftpd.conf | grep -v "#" anonymous_ena ...
 - 连接管理VMware SphereESXi
			
连接管理VMware SphereESXi 1. 准备 下载VMware-viclient-all-5.5.0-1993072,并按照提示安装 2. 使用VMware Sphere Client链接事 ...
 - NYOJ 47过河问题
			
主要思路:先排序.有两种可能是最小的情况,一种是让最小的去带着最大的过去,然后最小的再回来,还有一种就是先最小的和第二小的一块过去, 然后最小的回来,让最大的和第二大的过去,接着第二小的回来,第二小和 ...
 - servlet中访问mysql无法包含中文的解决
			
最近写servlet应用发现,如果我的sql语句中包含英文,访问数据库就失败,而我数据库的编码是utf8 -- UTF-8 Unicode,而我servlet的字符也已经转为UTF-8 ,还是不行. ...