1. 程式人生 > >使用python控制nginx禁封ip

使用python控制nginx禁封ip

服務器 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