社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

Nginx防攻击

Py站长 • 10 年前 • 4214 次点击  

指令

语法: limit_req zone=name [burst=number] [nodelay];

默认值:     —

上下文:    http, server, location

设置对应的共享内存限制域和允许被处理的最大请求数阈值。 如果请求的频率超过了限制域配置的值,请求处理会被延迟,所以 所有的请求都是以定义的频率被处理的。 超过频率限制的请求会被延迟,直到被延迟的请求数超过了定义的阈值 这时,这个请求会被终止,并返回503 (Service Temporarily Unavailable) 错误。这个阈值的默认值等于0。 比如这些指令:

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server { location /search/ { limit_req zone=one burst=5; }

限制平均每秒不超过一个请求,同时允许超过频率限制的请求数不多于5个。

如果不希望超过的请求被延迟,可以用nodelay参数:

limit_req zone=one burst=5 nodelay;

语法: limit_req_log_level info | notice | warn | error;
默认值:    
limit_req_log_level error;
上下文:    http, server, location
这个指令出现在版本 0.8.18.

设置你所希望的日志级别,当服务器因为频率过高拒绝或者延迟处理请求时可以记下相应级别的日志。 延迟记录的日志级别比拒绝的低一个级别;比如, 如果设置“limit_req_log_level notice”, 延迟的日志就是info级别。

语法: limit_req_zone $variable zone=name:size rate=rate;
默认值:     
上下文:    http

设置一块共享内存限制域的参数,它可以用来保存键值的状态。 它特别保存了当前超出请求的数量。 键的值就是指定的变量(空值不会被计算)。 示例用法:

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; 这里,状态被存在名为“one”,最大10M字节的共享内存里面。对于这个限制域来说 平均处理的请求频率不能超过每秒一次。

键值是客户端的IP地址。 如果不使用$remote_addr变量,而用$binary_remote_addr变量, 可以将每条状态记录的大小减少到64个字节,这样1M的内存可以保存大约1万6千个64字节的记录。 如果限制域的存储空间耗尽了,对于后续所有请求,服务器都会返回 503 (Service Temporarily Unavailable)错误。

请求频率可以设置为每秒几次(r/s)。如果请求的频率不到每秒一次, 你可以设置每分钟几次(r/m)。比如每秒半次就是30r/m。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/425
 
4214 次点击  
文章 [ 2 ]  |  最新文章 10 年前
Py站长
Reply   •   1 楼
Py站长    10 年前

@BeginMan :)

BeginMan
Reply   •   2 楼
BeginMan    10 年前

真高产阿,赞一个。