ingress-nginx 的限速功能在 nginx.conf 中的对应配置

本篇目录

说明

ingress-nginx 针对源 IP 限速 示例了 ingress-nginx 的基于源 IP 限速的方法,这里解读一下配置文件。

配置

location 中增加的配置:

location /fastjson {
      ... 省略 ....
      limit_req zone=test-fastjson_rpm burst=25 nodelay;
      ... 省略 ....
}

zone 指向的是统计请求次数的共享内存,设置如下:

limit_req_zone $limit_dGVzdC1qaW5nYW5naHVpZ3VpeWlfZmFzdGpzb24 zone=test-fastjson_rpm:5m rate=5r/m;

内存大小是 5 兆,限速频率为每分钟 5 次。重点是作为 key 的变量 $limit_XXX 的值。 $limit_XXX 变量是共享内存中的次数统计的 key,用 map 指令定义,它的值取决于 $whitelist_XXX,如果 $whitelist_XXX 为 0,$limitXXX 的值是 $binary_remote_addr,即源 IP,否则为空。

map $whitelist_dGVzdC1qaW5nYW5naHVpZ3VpeWlfZmFzdGpzb24 $limit_dGVzdC1qaW5nYW5naHVpZ3VpeWlfZmFzdGpzb24 {
        0 $binary_remote_addr;
        1 "";
}

用白名单用 geo 变通实现,$the_real_ip 与名单中的 1.1.0.0/16 匹配时,$whitelist_XXX 是 1:

geo $the_real_ip $whitelist_dGVzdC1qaW5nYW5naHVpZ3VpeWlfZmFzdGpzb24 {
        default 0;
        
        1.1.0.0/16 1;
}

$the_real_ip 是 $remote_addr:

map '' $the_real_ip {

    default          $remote_addr;
}

不足

ingress-nginx 的限速功能只支持白名单,可以对部分 IP 不限速,但不支持黑名单,有时候希望只对特定的 IP 限速。

另外默认都是 nodelay 方式,好像不支持自定义:

location /fastjson {
      ... 省略 ....
      limit_req zone=test-fastjson_rpm burst=25 nodelay;
      ... 省略 ....
}

参考

  1. 李佶澳的博客
  2. ingress-nginx 针对源 IP 限速
  3. Nginx Alphabetical index of directives
  4. Nginx Alphabetical index of variables

推荐阅读

赞助商广告

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作

友情链接:  李佶澳的博客  小鸟笔记  软件手册  编程手册  运营手册  爱马影视  网络课程  奇技淫巧  课程文档  精选文章  发现知识星球  百度搜索 谷歌搜索