编程技术分享平台

网站首页 > 技术教程 正文

极简Nginx安全(nginx最全教程)

xnh888 2024-09-10 22:52:36 技术教程 23 ℃ 0 评论

一、CC攻击防护

nginx自带了限流的模块,可以用来防CC攻击:limit_conn和limit_req;

二、访问频率限制

首先,定义限制请求的区域(可以定义多个);

##在http段增加配置(定义limit_req_zone ):
limit_req_zone $binary_remote_addr zone=myreqzone:10m rate=10r/s;

参数说明:
$binary_remote_addr是需要限制的ip群;
zone=myreqzone表示这个limit_zone的名字叫做myreqzone,后面的使用中可以用这个myreqzone来进行指代;
后面的10m,代表为这个zone分配10m的内存,1m可以保存16000个$binary_remote_addr;
最后一个rate是频率,表示每个IP一秒钟只处理10个请求;

然后,就可以在server段增加配置;

##对全部的请求进行限流(应用上面定义的区域)
location /{
   ......   
   limit_req zone=myreqzone burst=150; 
   ......   
}
##也可以对某种后缀等url进行限流
location ~* .htm$ {
   ...... 
   limit_req zone=myreqzone burst=150 nodelay; 
   ......
}

1、burst表示缓冲队列的长度;
2、nodelay字面的意思是不延迟,具体说是对用户发起的请求不做延迟处理,有请求立即放进来,如果超过区域定义的限制,则直接丢弃,如果不增加nodelay,则严格按照频率,限制请求排队,按照顺序放请求进来处理;

二、访问连接限制

首先,定义限制连接的区域(可以定义多个);

limit_conn_zone $binary_remote_addr zone=myconnzoneperip:10m;
limit_conn_zone $server_name zone=myconnzoneperserver:10m;  

区域定义的目的,是将该区域内的IP,同时允许存在的最大连接数,超过这个数字的请求将被返回”Service unavailable” (503)代码;

参数说明:

$binary_remote_addr是需要限制的ip群;
zone=myconnzoneperip表示这个limit_zone的名字叫做myconnzoneperip,后面的使用中可以用这个myconnzoneperip来进行指代;
后面的10m,代表为这个zone分配10m的内存,1m可以保存16000个$binary_remote_addr是限制同一客户端ip地址;
然后就可以配置到Nginx的请求解析段;

server {    
   location / {
     ......   
     limit_conn myconnzoneperip 25; 
     ......   
}  

是限制每个IP只能同时存在25个连接;

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表