Really logging the POST request body (instead of “-”) with nginx

后端 未结 1 1771
南笙
南笙 2020-12-13 04:16

I\'m trying to log POST body, and add $request_body to the log_format in http clause, but the access_log command just pri

相关标签:
1条回答
  • 2020-12-13 05:16

    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:

    • it sends the request to a proxy,
    • or a fastcgi server.

    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.

    0 讨论(0)
提交回复
热议问题