ngx_http_limit_conn_module模块用于限制每个定义键的连接数,特别是来自单个IP地址的连接数。
limit_conn_module //连接频率限制语法: limit_conn_zone key zone=name:size;默认值: —所在模块: httplimit_conn_zone $binary_remote_addr zone=addr:10m;
语法: limit_conn zone number;默认值: —支持模块: http, server, locationlimit_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: httpmap $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: streamgeo $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.conf127.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最大并发为8limit_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;
