Server - Apache - 日志 - 使用 mod_dumpio 记录请求的 body

  1. 概述

    1. 尝试记录 post 请求里的内容
  2. 背景

    1. 学习 apache
    2. 目的是记录 request 的 body
    3. 这次要配置 core 模块之外的东西
  3. 环境

    1. 虚拟机 - OS
      1. VirtualBox6.0
      2. CentOS7.2
    2. apache
      1. 2.4.6-90
      2. yum 安装
    3. 宿主机 - OS
      1. Win10
    4. 网络
      1. 虚拟机使用 桥接模式

1. 思路

  1. 概述

    1. 这次的思路
  2. 思路

    1. 使用 dumpio 模块
    2. 使用 mod_security 模块
  3. 校验模块

    1. 命令

      > httpd -M | grep 'dumpio'
      > httpd -M | grep 'mod_security'
      
    2. 结果

      1. dumpio 存在
      2. mod_security 不存在
    3. 方案

      1. 先试试 dumpio

2. 书上说

  1. 很简单
    1. 确认模块 mod_dumpio
    2. 修改配置
      1. 就改个日志级别
      2. 打开 dumpioinput 即可

3. 实际

  1. 概述
    1. 感觉又被骗了
      1. 09 年的老书, 你要有准备

1. 配置 mod_dumpio

  1. 概述
    1. 尝试配置 dumpio

1. 修改配置

  1. 书上的配置, 貌似并不管用

  2. 使用了 官方文档 的配置

    LogLevel dumpio:trace7
    # 不加这个, 好像也可以...
    <IfModule dumpio_module>
        DumpIOInput On
    </IfModule>
    
  3. 说明

    1. 修改配置
      1. 修改 LogLevel
      2. 添加 dumpio_module 相关内容

2. 重启 apache

  1. 需要确认重启成功

3. 测试

  1. 访问 服务器

    > curl -X POST -d '{"key": "value"}' 'http://192.168.2.6:80/hello.html'
    
  2. 结果

    1. 服务器重启成功

    2. 访问成功

    3. 有日志

      # 日志在 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"}
      
  3. 感觉

    1. 效率好低

      1. 可能需要定义 error 日志的格式
        1. 这个有相关内容, 具体方式, 和 log 差不多...
    2. 日志混乱

      1. error 和 这种 body 信息汇聚在一起, 可能会有问题
        1. error 日志变大
        2. error 日志 和 body 信息相互干扰, 影响查找
    3. 还是想尝试一下另一种方式

ps

  1. ref

    1. 如何查看apache加载了哪些模块
    2. glossary
      1. module 词条里, 有关于 static 和 shared 的解释
    3. dumpio
      1. dumpio 模块的配置
  2. httpd 命令行简单描述

    1. 原来除了 systemctl, apachectl 之外, httpd 还有 第三个 命令行
    2. 有空看看吧...
  3. 疑问: 模块分类

    1. 问题

      1. httpd -M 找出的模块, 后面都有额外信息
        1. static
        2. shared
      2. 这到底是怎么回事呢
    2. 结果

      1. 静态 - static
        1. 静态
          1. 被编译进了 httpd 二进制文件的模块
      2. 动态 - shared
        1. 动态
          1. 模块分开储存
          2. 可以选择性的在运行时加载
  4. 模块名 vs 源文件名

    1. apache 模块

      1. 模块名
        1. 模块有自己的名字
      2. 源文件名
        1. 源文件, 也有自己的名
    2. 问题: 模块名 未必会和 源文件名 一样

    3. 解决

      1. 倒 apache 官网的模块索引, 搜索关键字
      2. 进入模块页面, 可以确认 模块名 和 源文件名
posted @ 2020-03-10 17:10  轩辕拾銉  阅读(1084)  评论(0编辑  收藏  举报