我需要记录 POST 数据。我已将其添加到我的配置中
location / {
echo_read_request_body;
access_log /var/log/nginx/domains/site.post.log postdata;
}
并将其添加到http
部分
log_format postdata '$time_local $request_body';
但在我的日志中我只能看到当地时间和破折号:
23/Jul/2016:16:07:49 +0000 -
有什么问题?
答案1
我遇到了同样的问题:没有记录任何帖子数据。我通过确保端点返回某些内容解决了我的问题。以下方法对我有用:
location /log {
echo_read_request_body;
access_log /var/log/nginx/postdata.log postdata;
default_type text/html;
echo "POST";
}
关键是:
- 使用以下方式设置 Content-Type 标头
default_type
- 在响应中提供一些内容
echo
答案2
location = / {
log_format postdata $request_body;
access_log /var/log/nginx/domains/site.post.log postdata;
fastcgi_pass php_cgi;
}
nginx 不会触及客户端请求主体,除非必须这样做,因此它不满足 $request_body 变量,有几个例外 1)如果它将请求发送到代理 2)或 fastcgi 服务器。所以在上面这个例子中,技巧是让 nginx 相信你会调用一个 cgi 脚本。
答案3
Nginx 默认不自带包含 的模块,echo_read_request_body
需要自行使用该模块进行编译。
在我们的用例中,要记录请求主体,我们需要使用命令
echo_read_request_body
和$request_body
变量(包含 Echo 模块的请求主体)。但是,默认情况下,此模块不随 NGINX 一起分发,为了能够使用它,我们必须从其源代码构建 NGINX,方法是使用随附的 Echo 模块的源代码构建它。
从https://developers.redhat.com/blog/2016/05/23/configuring-nginx-to-log-post-data-on-linux-rhel/