使用python控制nginx禁封ip
阿新 • • 發佈:2018-10-09
服務器 net 配置 nco amp img deny python import
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;
參考地址https://blog.csdn.net/u013372487/article/details/51841364/
版權聲明:本文原創發表於 博客園,作者為 RainBol 本文歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則視為侵權。
使用python控制nginx禁封ip