假设您有一个站点 API,它接受带参数的 GET 请求或 POST 请求(例如,使用标准 url 编码、& 分隔的 POST 数据)形式的数据。 如果你想记录和分析 API 调用,GET 请求会很容易,因为它们会在 apache 日志中。 有没有一种简单的方法来获取 apache 日志中的 POST 数据?
(当然,我们可以在应用程序中显式记录 POST 数据,但我希望有一种配置级别的方法,让我不用在代码中担心它。)
使用 Apache 的 mod_dumpio。出于明显的原因要小心。
请注意,mod_dumpio 在第一个空字符处停止记录二进制有效负载。例如,使用 mod_dumpio 上传 gzip 文件可能只会显示前几个字节。
另请注意,即使该模块存在于
multipart/form-data
文件夹中,Apache 也可能不会在
httpd.conf
中提及该模块。只需手动添加 /modules
就可以了。LoadModule
并放入
mod_security
:/etc/modsecurity/modsecurity.conf
SecAuditEngine On
SecAuditLog /var/log/apache2/modsec_audit.log
SecRequestBodyAccess on
SecAuditLogParts ABIJDFHZ
查看 POST 数据。
在 Debian/Ubuntu 上安装:
[ModSecurity][1]
使用推荐的配置文件:
$ sudo apt install libapache2-mod-security2
重新加载 Apache:
$ sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
您现在将在
$ sudo service apache2 reload
下找到记录的数据
/var/log/apache2/modsec_audit.log
sudo a2enmod dump_io
无需执行任何操作,默认已启用
$ tail -f /var/log/apache2/modsec_audit.log
--2222229-A--
[23/Nov/2017:11:36:35 +0000]
--2222229-B--
POST / HTTP/1.1
Content-Type: application/json
User-Agent: curl
Host: example.com
--2222229-C--
{"test":"modsecurity"}
重新启动阿帕奇
#AccessLog /path/to/your/log/abc.access.log 组合
AccessLog /path/to/your/log/abc.access.log postdata