最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中 access_log 中包含请求方法(GET和POST)的分析
时间:2026-07-16 07:50:49 编辑:袖梨 来源:一聚教程网
是的,Nginx access_log 默认包含请求方法;其位于 $request 字段开头,可用 grep 提取、awk 统计,GET 参数可见而 POST body 需额外配置 $request_body 才能记录。
是的,Nginx 的 access_log 默认就包含请求方法(GET/POST 等),无需额外配置。关键在于如何从日志中准确识别、提取和区分它们。
请求方法在日志中的位置很固定
在标准 log_format combined 或自定义格式中,$request 变量完整记录了请求行,例如:
"GET /api/user?id=123 HTTP/1.1""POST /login HTTP/1.0"
请求方法(GET、POST、PUT、DELETE 等)总是出现在 $request 字符串最开头,紧跟双引号后、空格前。这是解析的基础依据。
用 shell 快速筛选 GET 或 POST 请求
直接用 grep 即可按需提取:
- 查所有 POST 请求:
grep '"POST ' /var/log/nginx/access.log - 查所有 GET 请求:
grep '"GET ' /var/log/nginx/access.log - 排除 HEAD、OPTIONS 等干扰:加 word boundary,如
grep '"POST[[:space:]]' access.log - 统计每种方法出现次数:
awk '{print $6}' access.log | sed 's/"//' | sort | uniq -c | sort -nr(假设 $6 是 $request 字段)
区分 GET 和 POST 的实际意义不止于方法名
GET 的参数明文暴露在 URL 中(即 $request_uri 或 $request 里),而默认 access_log 不记录 POST 的 body 内容。这意味着:
- 分析 GET 接口时,可直接从日志中看到完整查询参数,便于排查缓存、鉴权或非法访问
- 分析 POST 接口时,仅靠默认日志只能知道“谁、何时、调了哪个路径”,无法得知传了什么数据 —— 若需参数级追踪,必须启用
$request_body并自定义 log_format - 注意:启用
$request_body有代价 —— 它只对非流式请求生效(如未使用 chunked encoding),且需确保 client_max_body_size 足够,并避免记录敏感字段(如密码)
验证日志是否真含请求方法的简单办法
执行这条命令,看输出前三行是否含 GET 或 POST:
head -3 /var/log/nginx/access.log | cut -d' ' -f6 | sed 's/"//g'
如果返回类似 GET、POST、PUT,说明字段可用;若为空或异常,可能是日志格式被覆盖或字段顺序错位(常见于自定义 log_format 中漏写 $request)。
相关文章
- black souls2大胃袋成就解锁攻略 07-22
- 考试酷网页版登陆入口-考试酷网页版学生登陆 07-22
- 豆包网页版官网入口-豆包网页版怎么删除记录 07-22
- 漫漫漫画免费版在线阅读下载安装-漫漫漫画官方正版下载地址手机版 07-22
- 如何完成macOS软件安装与DMG制作-怎样制作macOS软件安装的DMG文件 07-22
- 欧洲卡车2 MOD如何安装-欧洲卡车2 MOD安装方法指南 07-22