ngx_http_limit_conn_module模块用于限制每个定义键的连接数,特别是来自单个IP地址的连接数。

  1. limit_conn_module //连接频率限制
  2. 语法: limit_conn_zone key zone=name:size;
  3. 默认值:
  4. 所在模块: http
  5. limit_conn_zone $binary_remote_addr zone=addr:10m;
  1. 语法: limit_conn zone number;
  2. 默认值:
  3. 支持模块: http, server, location
  4. limit_conn_zone $binary_remote_addr zone=addr:10m;
  5. server {
  6. location /download/ {
  7. limit_conn addr 1;
  8. }

案例

  1. http {
  2. #对单个ip、单个会话同时存在的连接数的限制。这里定义一个存储区conn_zone,conn_zone的容量是1m,该存储区针对于变量$binary_remote_add生效,这里是针对单个IP生效。该模块只是一个定义,配置在http配置段,需要配合limit_conn指令使用才生效, limit_conn one 1表示该location段使用conn_zone定义的 limit_conn_zone ,对单个IP限制同时存在一个连接。
  3. limit_conn_zone $binary_remote_addr zone=conn_zone:1m;
  4. server {
  5. location / {
  6. limit_conn conn_zone 1;
  7. }
  8. }

Map模块

  1. Syntax: map string $variable { ... }
  2. Default:
  3. Context: http
  4. map $http_host $name {
  5. hostnames;
  6. default 0;
  7. example.com 1;
  8. *.example.com 1;
  9. example.org 2;
  10. *.example.org 2;
  11. .example.net 3;
  12. wap.* 4;
  13. }
  1. Syntax: map_hash_bucket_size size;
  2. Default:
  3. map_hash_bucket_size 32|64|128;
  4. Context: http
  1. Syntax: map_hash_max_size size;
  2. Default:
  3. map_hash_max_size 2048;
  4. Context: http

geo 模块

  1. Syntax: geo [$address] $variable { ... }
  2. Default:
  3. Context: stream
  4. geo $arg_remote_addr $geo {
  5. ...;
  6. }
  7. geo $country {
  8. default ZZ;
  9. include conf/geo.conf;
  10. delete 127.0.0.0/16;
  11. 127.0.0.0/24 US;
  12. 127.0.0.1/32 RU;
  13. 10.1.0.0/16 RU;
  14. 192.168.1.0/24 UK;
  15. }

案例

  1. whiteip.conf
  2. 127.0.0.1 0;
  3. 172.16.0.0/16 0;
  4. 192.168.0.0/24 0;
  5. geo $whiteiplist {
  6. default 1;
  7. include limit/whiteip.conf;
  8. }
  9. map $whiteiplist $limit {
  10. 1 $binary_remote_addr;
  11. 0 "";}
  12. limit_req_zone $limit zone=req:10m rate=8r/s; #除了白名单外的IP每秒最多处理8个请求
  13. limit_conn_zone $limit zone=reqip:10m;
  14. server {
  15. location / {
  16. limit_conn reqip 8; # 限制除了白名单外的IP,每个IP最大并发为8
  17. limit_req zone=req burst=15 nodelay; ## 并发15个每秒,超过burst限制,直接返回503
  18. }
  19. #####
  20. map $host $log_host {
  21. hostnames;
  22. default 'default';
  23. *.kk.com $host;
  24. *.kk.cn $host;
  25. *.kk.com $host;
  26. }
  27. access_log /var/log/nginx/$log_host.log main;