Server - Apache - 日志 - 使用 mod_dumpio 记录请求的 body
-
概述
- 尝试记录 post 请求里的内容
-
背景
- 学习 apache
- 目的是记录 request 的 body
- 这次要配置 core 模块之外的东西
-
环境
- 虚拟机 - OS
- VirtualBox6.0
- CentOS7.2
- apache
- 2.4.6-90
- yum 安装
- 宿主机 - OS
- Win10
- 网络
- 虚拟机使用 桥接模式
- 虚拟机 - OS
1. 思路
-
概述
- 这次的思路
-
思路
- 使用 dumpio 模块
- 使用 mod_security 模块
-
校验模块
-
命令
> httpd -M | grep 'dumpio' > httpd -M | grep 'mod_security'
-
结果
- dumpio 存在
- mod_security 不存在
-
方案
- 先试试 dumpio
-
2. 书上说
- 很简单
- 确认模块 mod_dumpio
- 修改配置
- 就改个日志级别
- 打开 dumpioinput 即可
3. 实际
- 概述
- 感觉又被骗了
- 09 年的老书, 你要有准备
- 感觉又被骗了
1. 配置 mod_dumpio
- 概述
- 尝试配置 dumpio
1. 修改配置
-
书上的配置, 貌似并不管用
-
使用了 官方文档 的配置
LogLevel dumpio:trace7 # 不加这个, 好像也可以... <IfModule dumpio_module> DumpIOInput On </IfModule>
-
说明
- 修改配置
- 修改 LogLevel
- 添加 dumpio_module 相关内容
- 修改配置
2. 重启 apache
- 需要确认重启成功
3. 测试
-
访问 服务器
> curl -X POST -d '{"key": "value"}' 'http://192.168.2.6:80/hello.html'
-
结果
-
服务器重启成功
-
访问成功
-
有日志
# 日志在 error.log 里 # 其实还有更多的日志内容, 这里只取到一小部分 [Tue Mar 10 01:45:15.446739 2020] [dumpio:trace7] [pid 22409] mod_dumpio.c(140): [client 192.168.2.6:51110] mod_dumpio: dumpio_in [getline-blocking] 0 readbytes [Tue Mar 10 01:45:15.446741 2020] [dumpio:trace7] [pid 22409] mod_dumpio.c(63): [client 192.168.2.6:51110] mod_dumpio: dumpio_in (data-HEAP): 49 bytes [Tue Mar 10 01:45:15.446743 2020] [dumpio:trace7] [pid 22409] mod_dumpio.c(103): [client 192.168.2.6:51110] mod_dumpio: dumpio_in (data-HEAP): Content-Type: application/x-www-form-urlencoded\r\n [Tue Mar 10 01:45:15.446749 2020] [dumpio:trace7] [pid 22409] mod_dumpio.c(140): [client 192.168.2.6:51110] mod_dumpio: dumpio_in [getline-blocking] 0 readbytes [Tue Mar 10 01:45:15.446752 2020] [dumpio:trace7] [pid 22409] mod_dumpio.c(63): [client 192.168.2.6:51110] mod_dumpio: dumpio_in (data-HEAP): 2 bytes [Tue Mar 10 01:45:15.446754 2020] [dumpio:trace7] [pid 22409] mod_dumpio.c(103): [client 192.168.2.6:51110] mod_dumpio: dumpio_in (data-HEAP): \r\n [Tue Mar 10 01:45:15.446971 2020] [dumpio:trace7] [pid 22409] mod_dumpio.c(140): [client 192.168.2.6:51110] mod_dumpio: dumpio_in [readbytes-blocking] 16 readbytes [Tue Mar 10 01:45:15.446975 2020] [dumpio:trace7] [pid 22409] mod_dumpio.c(63): [client 192.168.2.6:51110] mod_dumpio: dumpio_in (data-HEAP): 16 bytes # 这就是我们要找的 body 内容... # 感觉性价比好低的样子... [Tue Mar 10 01:45:15.446977 2020] [dumpio:trace7] [pid 22409] mod_dumpio.c(103): [client 192.168.2.6:51110] mod_dumpio: dumpio_in (data-HEAP): {"key": "value"}
-
-
感觉
-
效率好低
- 可能需要定义 error 日志的格式
- 这个有相关内容, 具体方式, 和 log 差不多...
- 可能需要定义 error 日志的格式
-
日志混乱
- error 和 这种 body 信息汇聚在一起, 可能会有问题
- error 日志变大
- error 日志 和 body 信息相互干扰, 影响查找
- error 和 这种 body 信息汇聚在一起, 可能会有问题
-
还是想尝试一下另一种方式
-
ps
-
ref
- 如何查看apache加载了哪些模块
- glossary
- module 词条里, 有关于 static 和 shared 的解释
- dumpio
- dumpio 模块的配置
-
httpd 命令行简单描述
- 原来除了 systemctl, apachectl 之外, httpd 还有 第三个 命令行
- 有空看看吧...
-
疑问: 模块分类
-
问题
- httpd -M 找出的模块, 后面都有额外信息
- static
- shared
- 这到底是怎么回事呢
- httpd -M 找出的模块, 后面都有额外信息
-
结果
- 静态 - static
- 静态
- 被编译进了 httpd 二进制文件的模块
- 静态
- 动态 - shared
- 动态
- 模块分开储存
- 可以选择性的在运行时加载
- 动态
- 静态 - static
-
-
模块名 vs 源文件名
-
apache 模块
- 模块名
- 模块有自己的名字
- 源文件名
- 源文件, 也有自己的名
- 模块名
-
问题: 模块名 未必会和 源文件名 一样
-
解决
- 倒 apache 官网的模块索引, 搜索关键字
- 进入模块页面, 可以确认 模块名 和 源文件名
-
尽量尝试解释清楚; 自己校对能力有限, 如果有错误欢迎指出