nginx日志

python脚本分析nginx日志1000条IP超过100次自动封 IP

最近有一些王八蛋,总是喜欢爬取网站内容,于是就想到利用python 脚本分析nginx日志1000条,

IP 1000次中超过100次 自动封 IP 功能,正常情况1000条记录,一般不会超过100个,当然,

你可以根据情况调整,python代码如下

#!/usr/bin/python

__author__ = 'jincon'

import os;
import string;

lines_ = os.popen("tail -n 1000 /home/www/nginx.log  |awk -F' ' '{print $1}'|sort|uniq -c|sort -n").read();
lines = lines_.split("\n");

for line in lines:
	if line != '':
		line = line.strip();
		lineArr = line.split(" ");
		if int(lineArr[0])>50:
			print lineArr[1]+"=="+lineArr[0];


print "ok";

这个代码,我没有写封 I P 的功能,封 IP,一般普通的服务器不外乎就 iptables 和 nginx 的 deny 了

iptables很简单,我就不说了。

nginx 的话,可以在 python 脚本里面把超过限制的 IP,写入到一个文件里面然后 nginx  ,include 就行了,当然你还要reload 下 nginx,注意,不要重启,没必要,只要加载配置文件即可。

最后就是加一个计划任务,譬如每隔5分钟运行一次,封特么的的。


关键词: python脚本 , nginx日志

nginx的access log日志中如何记录post数据和参数

常见的nginx配置中access log一般都只有GET请求的参数,而POST请求的参数却不行。但是在实际开发过程中,问你却经常需要用到nginx的post数据进行检查或者调试。

nginx官方网站记录:

$request_body

This variable(0.7.58+) contains the body of the request.
The significance of this variable appears in locations with directives 
proxy_pass or fastcgi_pass.

正如上文件所示,只需要使用$request_body即可打出post的数据,在现存的server段加上下面的设置即可:

log_format access '$remote_addr - $remote_user [$time_local] 
"$request" $status $body_bytes_sent $request_body "$http_referer"
 "$http_user_agent" $http_x_forwarded_for';
access_log logs/test.access.log access;

关键词: nginx日志 , 记录post数据 , nginx