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 or fastcgi_pass directives to your block.
The easiest way is to send it to Nginx itself as a proxied server, for example with this configuration:
location = /c.gif { access_log logs/uaa_access.log client; # add the proper port or IP address if Nginx is not on 127.0.0.1:80 proxy_pass http://127.0.0.1/post_gif; } location = /post_gif { # turn off logging here to avoid double logging access_log off; empty_gif; } If you only expect to receive some key-pair values, it might be a good idea to limit the request body size:
client_max_body_size 1k; client_body_buffer_size 1k; client_body_in_single_buffer on; I also received "405 Not Allowed" errors when testing using empty_gif; and curl (it was ok from the browser), I switched it to return 200; to properly test with curl.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With