ngx_http_limit_conn_module模块用于限制每个定义键的连接数,特别是来自单个IP地址的连接数。
limit_conn_module //连接频率限制
语法: limit_conn_zone key zone=name:size;
默认值: —
所在模块: http
limit_conn_zone $binary_remote_addr zone=addr:10m;
语法: limit_conn zone number;
默认值: —
支持模块: http, server, location
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location /download/ {
limit_conn addr 1;
}
案例
http {
#对单个ip、单个会话同时存在的连接数的限制。这里定义一个存储区conn_zone,conn_zone的容量是1m,该存储区针对于变量$binary_remote_add生效,这里是针对单个IP生效。该模块只是一个定义,配置在http配置段,需要配合limit_conn指令使用才生效, limit_conn one 1表示该location段使用conn_zone定义的 limit_conn_zone ,对单个IP限制同时存在一个连接。
limit_conn_zone $binary_remote_addr zone=conn_zone:1m;
server {
location / {
limit_conn conn_zone 1;
}
}
Map模块
Syntax: map string $variable { ... }
Default: —
Context: http
map $http_host $name {
hostnames;
default 0;
example.com 1;
*.example.com 1;
example.org 2;
*.example.org 2;
.example.net 3;
wap.* 4;
}
Syntax: map_hash_bucket_size size;
Default:
map_hash_bucket_size 32|64|128;
Context: http
Syntax: map_hash_max_size size;
Default:
map_hash_max_size 2048;
Context: http
geo 模块
Syntax: geo [$address] $variable { ... }
Default: —
Context: stream
geo $arg_remote_addr $geo {
...;
}
geo $country {
default ZZ;
include conf/geo.conf;
delete 127.0.0.0/16;
127.0.0.0/24 US;
127.0.0.1/32 RU;
10.1.0.0/16 RU;
192.168.1.0/24 UK;
}
案例
whiteip.conf
127.0.0.1 0;
172.16.0.0/16 0;
192.168.0.0/24 0;
geo $whiteiplist {
default 1;
include limit/whiteip.conf;
}
map $whiteiplist $limit {
1 $binary_remote_addr;
0 "";}
limit_req_zone $limit zone=req:10m rate=8r/s; #除了白名单外的IP每秒最多处理8个请求
limit_conn_zone $limit zone=reqip:10m;
server {
location / {
limit_conn reqip 8; # 限制除了白名单外的IP,每个IP最大并发为8
limit_req zone=req burst=15 nodelay; ## 并发15个每秒,超过burst限制,直接返回503
}
#####
map $host $log_host {
hostnames;
default 'default';
*.kk.com $host;
*.kk.cn $host;
*.kk.com $host;
}
access_log /var/log/nginx/$log_host.log main;