I'm trying to log POST body, and add $request_body
to the log_format
in http
clause, but the access_log
command just prints "-" as the body after I send POST request using:
curl -d name=xxxx myip/my_location
My log_format (in http
clause):
log_format client '$remote_addr - $remote_user $request_time $upstream_response_time '
'[$time_local] "$request" $status $body_bytes_sent $request_body "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
My location definition(in server clause):
location = /c.gif {
empty_gif;
access_log logs/uaa_access.log client;
}
How can I print the actual POST data from curl?
Nginx doesn't parse the client request body unless it really needs to, so it usually does not fill the
$request_body
variable.The exceptions are when:
So you really need to either add the
proxy_pass
orfastcgi_pass
directives to your block.The easiest way is to send it to Nginx itself as a proxied server, for example with this configuration:
If you only expect to receive some key-pair values, it might be a good idea to limit the request body size:
I also received "405 Not Allowed" errors when testing using
empty_gif;
and curl (it was ok from the browser), I switched it toreturn 200;
to properly test with curl.