使用python控制nginx禁封ip

python控制nginx禁封ipnginx中的access.log最近有大量的用户访问,怎么样屏蔽掉在一定时间段内访问次数多的ip呢?测试准备:两个tomcat,一个nginx做均衡负载,服务器上装有python3python脚本#服务器每60s循环一次...

python控制nginx禁封ip

nginx中的access.log最近有大量的用户访问,怎么样屏蔽掉在一定时间段内访问次数多的ip呢?

测试准备:

  两个tomcat,一个nginx做均衡负载,服务器上装有python3

  python脚本

#服务器每60s循环一次,抓取到超过200次以上的ip地址写入rainbol_ip.conf文件中,重启nginx禁封生效
import time
import datetime
import os
point = 0

while True:
    with open('access.log', encoding='utf-8') as f:
        if f:
            point_action = f.seek(point)
            all_ip = []
            for i in f:
                ip = i.split("-")[0]
                all_ip.append(ip)
            point = f.tell()
            all_ip_set = set(all_ip)
            for i in all_ip_set:
                if all_ip.count(i) > 200:
                    with open('rainbol_ip.conf','a+',encoding='utf-8') as f:
                            f.write("deny " + i + ";   # %s禁封\n" % datetime.datetime.now())
                            os.system("nginx -s reload")
    time.sleep(60)

  新增加一个配置文件(可自定)和nginx.conf放在一个目录下  touch rainbol_ip.conf

  把python脚本放在access.log目录中

  nginx.conf中http{}或者server{}块中加入include rainbol_ip.conf;

测试开始:

  重启nginx  nginx -s reload

  启动python脚本文件后台执行  python3 access.log &

  使用jmeter压测,当一段时间后访问页面

  

查看禁封配置日志  cat rainbol_ip.conf 

 

//屏蔽单个ip访问

deny IP; 

//允许单个ip访问

allow IP; 

//屏蔽所有ip访问

deny all; 

//允许所有ip访问

allow all; 

//屏蔽整个段即从123.0.0.1到123.255.255.254访问的命令

deny 123.0.0.0/8

//屏蔽IP段即从123.45.0.1到123.45.255.254访问的命令

deny 124.45.0.0/16

//屏蔽IP段即从123.45.6.1到123.45.6.254访问的命令

deny 123.45.6.0/24

//如果你想实现这样的应用,除了几个IP外,其他全部拒绝,
//那需要你在guolv_ip.conf中这样写

allow 1.1.1.1; 
allow 1.1.1.2;
deny all; 

单独网站屏蔽IP的方法,把include guolv_ip.conf; 放到网址对应的在server{}语句块,
所有网站屏蔽IP的方法,把include guolv_ip.conf; 放到http {}语句块。

参考地址https://blog.csdn.net/u013372487/article/details/51841364/

 

 版权声明:本文原创发表于 博客园,作者为 RainBol?本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

本文标题为:使用python控制nginx禁封ip