默认 access_log 包含 get 和 post 请求方法,关键在于日志格式是否保留 $request 或显式使用 $request_method;推荐用 log_format method_count 单独记录 $request_method,并通过 awk 按方法、时间、接口路径多维统计调用频次。

默认 access_log 就包含 GET 和 POST 请求方法,关键在于日志格式是否保留了 $request 或显式使用 $request_method,以及后续如何准确提取和统计。
确认日志里真有请求方法
执行这条命令快速验证:
head -3 /var/log/nginx/access.log | cut -d' ' -f6 | sed 's/"//g'如果输出是 GET、POST、PUT 等,说明字段可用;若为空或异常,可能是自定义 log_format 漏写了 $request 或 $request_method,导致方法信息丢失。
用 $request_method 单独记录更清晰
在 nginx.conf 的 http 块中定义新格式,把方法单独拎出来:
log_format method_count '$remote_addr [$time_local] $request_method $uri $status $body_bytes_sent';然后在 server 或 location 中启用:
access_log /var/log/nginx/method.log method_count;这样每行开头就是方法名,字段对齐稳定,后续用 awk 统计不会因 URL 中空格出错。
快速统计 GET/POST 调用频次
假设日志路径为 /var/log/nginx/method.log,运行:
输出类似:
GET 12480POST 3925
如需按小时细分,可加时间字段处理:
awk '{gsub(/\[|:/," ",$2); print substr($2,1,2) " " $3}' /var/log/nginx/method.log | sort | uniq -c分析接口级调用分布(不只是总次数)
只看方法总数不够,还要知道哪些接口被 GET 多、哪些被 POST 多。用这个命令按「方法 + 路径」聚合:
awk '$3 ~ /^(GET|POST)$/ {key = $3 " " $4; count[key]++} END {for (k in count) print count[k], k}' /var/log/nginx/method.log | sort -nr | head -10结果示例:
842 POST /api/login715 GET /api/user/profile
633 POST /api/order/create
这样能一眼看出高频操作类型和对应路径,便于优化缓存策略或排查异常调用。











