echo_read_request_body 不起作用。如何记录 POST 请求正文(nginx)?

Vla*_*huk 5 nginx logging

我需要记录 POST 数据。我已经添加到我的配置中

 location / {
     echo_read_request_body;
     access_log     /var/log/nginx/domains/site.post.log postdata;
 }
Run Code Online (Sandbox Code Playgroud)

并将其添加到http部分

log_format  postdata '$time_local $request_body';
Run Code Online (Sandbox Code Playgroud)

但在我的日志中我只能看到当地时间和破折号:

23/Jul/2016:16:07:49 +0000 - 
Run Code Online (Sandbox Code Playgroud)

有什么问题?

Dan*_*ner 2

location = / {
  log_format postdata $request_body;
  access_log /var/log/nginx/domains/site.post.log postdata;
  fastcgi_pass php_cgi;
}
Run Code Online (Sandbox Code Playgroud)

nginx 除非必须,否则不会接触客户端请求正文,因此它不满足 $request_body 变量,有一些例外 1) 如果它将请求发送到代理 2) 或 fastcgi 服务器。所以在上面这个例子中,技巧是让 nginx 相信你会调用一个 cgi 脚本。

  • 您能否解释一下您的答案,而不是仅提供此示例代码?毕竟,理解比遵循食谱重要得多。 (3认同)