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的情形。
lua_shared_dict limit 20m;
access_by_lua_file "conf/access_rate_limit.lua";
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
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即可。
风险
如果比率设置过低,可能会影响正常请求。