下面是关于“Windows下Nginx日志处理脚本”的详细攻略。
一、背景
Nginx是一款高性能的Web服务器,它能够快速处理大量请求。在开发网站时,我们会使用Nginx来提供网站服务。Nginx会记录访问日志,其中包含了访问者的IP地址、请求的URL、响应状态码等信息。
针对这些Nginx记录的日志信息,我们需要分析日志才能更好地了解网站的访问情况、用户行为等信息。而在Windows系统中,我们可以用python的实现的一个简单的日志处理脚本来实现这一目标。
二、先决条件
为了运行这个处理脚本,我们需要先满足以下要求:
1. 安装Python; 脚本采用Python开发,确保安装有Python环境。
2. 安装Nginx; Nginx需正常运行,才能产生访问日志,我们才需要去分析日志。
三、Nginx日志格式
以下是默认情况下的Nginx日志格式:
$log_format combined '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
其中,日志中的各个字段对应的含义分别是:
- $remote_addr
:客户端IP地址
- $remote_user
:客户端用户
- $time_local
:访问时间和时区
- "request"
:请求的页面和协议
- $status
:请求状态响应
- $body_bytes_sent
:发送页面的大小
- "http_referer"
:引导用户查找页面的来源页面地址
- "http_user_agent"
:浏览器相关信息
- "http_x_forwarded_for"
:反向代理相关信息
四、脚本开发
参考脚本内容如下,针对具体需求可以进行二次开发。
import re
# 日志文件路径
log_path = "E:/wwwlogs/access.log"
# 分别统计每个url的访问量和ip出现次数
url_count = {}
ip_count = {}
with open(log_path, "r") as f:
for line in f:
# 提取访问URL和客户端IP地址
pattern = re.compile(r'(.+\?.+ )')
result = pattern.findall(line)
url = ''
if result:
url = result[0].split()[1]
ip = line.split()[0]
# 统计每个URL的访问量
if url in url_count:
url_count[url] += 1
else:
url_count[url] = 1
# 统计每个IP出现的次数
if ip in ip_count:
ip_count[ip] += 1
else:
ip_count[ip] = 1
# 按照访问量倒序排列
sorted_url_count = sorted(url_count.items(), key=lambda k: k[1], reverse=True)
print('\nURL访问量:')
for url, count in sorted_url_count:
print(url, count)
# 按照IP出现次数倒序排列
sorted_ip_count = sorted(ip_count.items(), key=lambda k: k[1], reverse=True)
print('\nIP出现次数:')
for ip, count in sorted_ip_count:
print(ip, count)
五、实施过程
- 打开安装好的Python,新建一个处理日志的脚本文件,例如filename.py。
- 将脚本复制到该文件中。
- 设置
log_path
为Nginx日志文件路径,保存脚本文件。 - 打开命令行工具(如cmd),定位到处理日志的脚本文件所在的路径中。
- 输入如下命令,运行脚本。执行这个命令后,会在命令行中输出URL的访问量和IP的出现次数统计结果。如果期望将结果输出到文件中,则可以在命令末尾加上“>filename.txt”来实现。
python filename.py
例如,在Windows系统中将处理日志的脚本文件保存为analysis_log.py
,Nginx日志文件为access.log
,运行下面命令:
python analysis_log.py > result.txt
结果将被输出到result.txt文件中。
六、示例说明
下面是两个使用示例:
示例1
这个项目的一个典型应用场景是,对Nginx服务器的访问进行量化和统计,以更好地了解它所面临的流量状态和类型。例如,我们想要了解最常被访问的页面或文件。为此,我们可以执行以下操作:
1. 执行脚本:python analysis_log.py > result.txt
2. 打开输出文件result.txt,查看URL访问量排名。
例如输出文件中几行结果如下:
/to-kfjfsdk.fj 50
?to=htt%3a%2f%2fwww.ppcfudjkfohsdflkoe.com%2ffkjfsdk 20
/test.htm 15
说明网站中最受欢迎的页面是to-kfjfsdk.fj,该页面访问量为50次。
示例2
在某些情况下,可能想了解网站的访问来源或者攻击地址。这时就需要分析访问日志中的客户端IP地址。例如,运行以下操作完全可以过滤掉所有外部IP流量,只分析目标服务器生成的数据.
1. 通过firewall等工具设置规则:仅允许某些IP地址访问Nginx服务器。
2. 执行脚本:python analysis_log.py > result.txt
3. 打开输出文件result.txt,查看IP出现次数排名。
例如输出文件中几行结果如下:
192.168.1.1 5100
192.168.1.2 3618
192.168.1.3 2036
说明IP地址为192.168.1.1最多,出现次数为5100次。这告诉我们,这个IP可能是站点的某个管理员。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:windows下Nginx日志处理脚本 - Python技术站