Nginx流量控制插件

Nginx流量控制插件

版本号: V_0.1

说明

基于lua的流量控制,原理是统计IP+URI的个数,在配置的时间内超过配置个数,即拒绝请求。

配置

1、使用openresty或nginx集成lua的环境。

参考文档[Nginx集成lua环境的配置以及openresty环境安装]

软件下载地址请点击[download]

2、修改nginx.conf

nginx.conf第一行添加

user root root;

如果nginx的worker_process不是root,可能会发生请求404的情形。

http下添加

lua_shared_dict limit 20m;

将access_rate_limit.lua放到nginx的conf目录,然后在nginx.conf的http或server或location下添加:

access_by_lua_file "conf/access_rate_limit.lua";

比如要对所有server生效,则需放到http下;对某个location生效则放到location下即可,例:

    server {
        listen       80;
        location / {
            access_by_lua_file "conf/access_rate_limit.lua";
            root   html;
            index  index.html index.htm;
        }
    }

3、修改默认比率

vim access_rate_limit.lua
local config_rate = "20/1"

20/1表示同一个IP+URI在1s内允许通过20次,可以根据需求调整。

生效及取消

配置完成后reload nginx即可生效。

/usr/local/nginx/sbin/nginx -s reload

如果触发控制,会拒绝请求并返回http 429,并在error.log打印日志:

2018/11/02 14:50:06 [info] 20634#20634: *3938 [lua] test_rate_limit.lua:35: cc_attack_check():  rate_limit:  uri: 192.166.62.104/index.html limit: 21, client: 192.166.62.104, server: localhost, request: "GET /index.html HTTP/1.0", host: "192.166.62.136"
2018/11/02 14:50:06 [info] 20635#20635: *3939 [lua] test_rate_limit.lua:35: cc_attack_check():  rate_limit:  uri: 192.166.62.104/index.html limit: 21, client: 192.166.62.104, server: localhost, request: "GET /index.html HTTP/1.0", host: "192.166.62.136"

取消生效只需在nginx.conf中注释

# access_by_lua_file "conf/access_rate_limit.lua";

并reload nginx即可。

风险

如果比率设置过低,可能会影响正常请求。

你可能感兴趣的:(Nginx流量控制插件)