计算 NGINX 上每个 IP 地址每秒的请求数

问题描述 投票:0回答:1

我需要实施 NGINX 速率限制。有很多关于如何执行此操作的指南,但没有关于如何从访问日志中获取实际值/统计信息的指南。

我需要从 NGINX 访问日志中获取的是。

  1. 每个 IP 地址每分钟的请求数
  2. 来自所有 IP 地址的每分钟平均请求数
  3. 每个 IP 地址每分钟的最大请求数

这可能吗?这里的一位高级工程师告诉我事实并非如此,但我认为可能是,但我有点 Linux 菜鸟。

谢谢大家

nginx throttling
1个回答
0
投票

有一个非常好的教程适用于 Nginx,并进行了一些小的修改:使用 Apache 日志查看流量级别

在此服务器上有自定义日志格式,您需要适应您的服务器。

注意:如果使用日志轮换,您可能需要提供较旧的日志文件。 示例:

zgrep /var/log/nginx/access.log* | cut -d [ -f 5 | cut -d ] -f 1

# between 5 and 6 there is the date, for example: [23/Oct/2024:07:48:15 +0000]

# Requests per day
cat /var/log/nginx/access.log.1 | cut -d [ -f 5 | cut -d ] -f 1 | cut -d: -f1 | uniq -c

# Requests per hour (all days)
cat /var/log/nginx/access.log.1 | cut -d [ -f 5 | cut -d ] -f 1 | awk -F: '{print $2":00"}' | sort -n | uniq -c

# Requests per hour (per day)
cat /var/log/nginx/access.log.1 | cut -d [ -f 5 | cut -d ] -f 1 | cut -d [ -f 5 | cut -d ] -f 1 | awk -F: '{print $1":"$2":00"}' | sort -n | uniq -c

# Requests per minute (all days)
cat /var/log/nginx/access.log.1 | cut -d [ -f 5 | cut -d ] -f 1  | awk -F: '{print $2":"$3}' | sort -nk1 -nk2 | uniq -c | awk '{ if ($1 > 10) print $0}'

© www.soinside.com 2019 - 2024. All rights reserved.