nginxs

运维博客

09-nginx limit_req和limit_conn_zone

2016/05/13 23:29 于 web 0

微信 微博 豆瓣 人人

介绍

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教程

第一章 nginx安装基本引导和进程信号

02-nginx IO模型

03-nginx负载均衡

04-nginx的root和alias区别

05-nginx limit_req和limit_conn_zone

nginx limit_req和limit_conn_zonenginx limit_reqnginx limit_conn_zonenginxnginx限制ip请求频率nginx限制ip连接数

管理