python控制nginx禁封ip
nginx中的access.log最近有大量的用户访问,怎么样屏蔽掉在一定时间段内访问次数多的ip呢?
测试准备:
两个tomcat,一个nginx做均衡负载,服务器上装有python3
python脚本
#脚本每60s循环一次,抓取到超过200次以上的ip地址写入rainbol_ip.conf文件中,重启nginx禁封生效
import time
import datetime
import os WENJIAN='/etc/nginx/rainbol_ip.conf'
point = 0
os.system("nginx -s reload")
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(WENJIAN, encoding='utf-8') as f1:
des = f1.read().split()
if not des or i in des:
with open(WENJIAN, 'a+', encoding='utf-8') as f2:
f2.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
nginx禁封规则:
//屏蔽单个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允许条件一定要写在deny前面不然不生效,之后重启nginx即可 allow 1.1.1.1;
allow 1.1.1.2;
deny all; 参考地址https://blog.csdn.net/u013372487/article/details/51841364/
版权声明:本文原创发表于 博客园,作者为 RainBol本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
使用python控制nginx禁封ip的更多相关文章
-
利用python获取nginx服务的ip以及流量统计信息
#!/usr/bin/python #coding=utf8 log_file = "/usr/local/nginx/logs/access.log" with open(log ...
-
python反爬之封IP
# requests是第三方库,需要安装 pip install requests import requests # 在日常的爬虫中,封ip也是一个很常用的反爬虫手段,遇到这种情况,我们只需要在每次 ...
-
nginx deny 封IP
官方文档地址:http://nginx.org/en/docs/http/ngx_http_access_module.html#deny Syntax: deny address | CIDR | ...
-
nginx/iptables动态IP黑白名单实现方案
nginx/iptables动态IP黑白名单实现方案 一.手动封IP步骤 1.Nginx手动封IP 1.获取各个IP访问次数 awk '{print $1}' nginx.access.log |so ...
-
利用 ipset 封禁大量 IP
使用 iptables 封 IP,是一种比较简单的应对网络攻击的方式,也算是比较常见.有时候可能会封禁成千上万个 IP,如果添加成千上万条规则,在一台注重性能的服务器或者本身性能就很差的设备上,这就是 ...
-
nginx封ip,禁用IP段的设置说明
nginx的ngx_http_access_module 模块可以封配置内的ip或者ip段,语法如下: deny IP; deny subnet; allow IP; allow subnet; # ...
-
nginx封IP脚本
#!/bin/bash max= confdir=/etc/nginx/conf.d/blockips.conf logdir=/var/log/nginx/access.log echo " ...
-
python统计apache、nginx访问日志IP访问次数并且排序(显示前20条)【转】
前言:python统计apache.nginx访问日志IP访问次数并且排序(显示前20条).其实用awk+sort等命令可以实现,用awk数组也可以实现,这里只是用python尝试下. apach ...
-
httpd进程数统计,IP封禁,IP连接数量情况查看
ps -ef|grep httpd|wc -l 统计httpd进程数,连个请求会启动一个进程,使用于Apache服务器. 查看Apache的并发请求数及其TCP连接状态:netstat -n | aw ...
随机推荐
-
React子组件与父组件传值
一 子组件向父组件传值 //子组件var Child = React.createClass({ render: function(){ return ( <div> 请输入邮箱:< ...
-
win2008主机IIS7.x 关于web.config设置301重定向
win2008主机IIS7.x 关于web.config设置301重定向 要求:windows主机是IIS7.0或以上的版本 方法如下: 在网站的根目录下新建web.config文件并将一下代码加入到 ...
-
安装mysqlsla性能分析工具
开启mysql慢查询日志 vi /etc/my.cnf slow-query-log = on #开启MySQL慢查询功能 slow_query_log_file = /data/mysql/127 ...
-
<;转载>;bellman-ford算法
转载来源:https://www.cnblogs.com/tanky_woo/archive/2011/01/17/1937728.html 相关文章: 1.Dijkstra算法: http://ww ...
-
LCA(Lowest Common Ancesor)
LCA(Lowest Common Ancesor) 1.基于二分搜索算法 预处理father[v][k]表示v的2的k次方层祖先,时间复杂度是O(nlogn),每次查询的时间复杂度是O(logn), ...
-
撩课-Web大前端每天5道面试题-Day29
1.https协议的优点? 使用HTTPS协议可认证用户和服务器, 确保数据发送到正确的客户机和服务器: HTTPS协议是由SSL+HTTP协议构建的可进行加密传输. 身份认证的网络协议,要比http ...
-
实战小项目之嵌入式linux图像采集与传输
项目简介 本次编程实战主要是围绕嵌入式linux v4l2采集框架展开,包括以下几个部分: v4l2视频采集 IPU转码 framebuffer显示 自定义UDP简单协议进行传输 上位机软件 ...
-
LVS项目介绍
LVS项目介绍 章文嵩 (wensong@linux-vs.org) 转自LVS官方参考资料 2002 年 3 月 本文介绍了Linux服务器集群系统--LVS(Linux Virtual Serve ...
-
Dubbo学习系列之九(Shiro+JWT权限管理)
村长让小王给村里各系统来一套SSO方案做整合,隔壁的陈家村流行使用Session+认证中心方法,但小王想尝试点新鲜的,于是想到了JWT方案,那JWT是啥呢?JavaWebToken简称JWT,就是一个 ...
-
MongoDB查询和sql查询的总结
查询所有表或集合 sql show tables mongodb db.getCollectionNames() 删除集合或表 sql drop table 表名 mongodb ...