介绍
nginx limit_req和limit_conn_zone两个模块可以有效的帮助你屏蔽一部分恶意请求··
nginx限制请求频率
nginx limit_req用于每个IP的请求频··
超出阈值的请求默认将返··503 (Service Temporarily Unavailable)
rate的单位分··"r/s","r/m"
域声明语法: limit_req_zone key zone=name:size rate=rate;
域调用语法:limit_req zone=name [burst=number] [nodelay];
··1··
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; #以··$binary_remote_addr“为辨识获取钥匙,定义one为限值域··10m为钥匙桶大小··10兆)··1r/s··1次每··
server { #上面定义就是同一IP的用户每秒仅能请求一次失败返··503
location /search/ {
limit_req_status 599; #指定受限后请求返回httpcode 599
limit_req zone=one burst=5 nodelay; #调用one域,burst=5··5个特权令牌(特权令牌拥有者可以直接请求服务) 超过503,nodelay超过令牌数不等待令牌发··
} #如果不调用nodelay用户会一直等到服务正常相··
··2··
limit_req_zone $server_name zone=perserver:10m rate=10r/s; #这次就是根据用户访问域名限制访问频率
server {
limit_req_log_level error; #指定受限制请求日志级别error
limit_req zone=perip burst=5 nodelay; #如果访问域名$server_name超过10+5··/s就会直接503
}
限制连接··
limit_conn_zone key zone=name:size; #必须在http级别配置
limit_conn_status code; #限制报错httpcode
limit_conn_log_level info | notice | warn | error; 首先请求日志级别
limit_zone name $variable size; #必须在http级别配置
http {
limit_conn_zone $binary_remote_addr zone=addr:10m; #根据用户ip限制连接··
limit_conn_zone $server_name zone=perserver:10m; #根据用户请求域名限制连接··
...
server {
...
location /download/ {
limit_conn addr 1; #限制同时请求··/download/“目录的连接只有一··
}
nginx教程