Log data in Nginx
How to log data (POST, GET) in Nginx web server.
On this page
Update your
nginx.conf
configuration file to enable POST and GET data logging. By default, Nginx does not log POST data.
Log POST data
To log POST data, update the
nginx.conf
file at the
http
block directive. This code snippet will log POST data to the
access.log
log file:
http {
log_format custom_post_log '$request_body';
access_log /var/log/nginx/access.log custom_post_log;
server {
location / {
echo_read_request_body;
default_type text/html;
}
}
}
It's important to note the following:
- The
log_format
andaccess_log
parameters must be placed inside thehttp {}
block directive. - It's important to add in
echo_read_request_body
paramater (without value) must be placed in thelocation {}
block directive.
Let's say you want the POST data to be logged into a different log file, the
postdata.log file
:
server {
location = / {
log_format custom_post_data_log $request_body;
access_log /var/log/nginx/postdata.log custom_post_data_log;
}
}
Log GET data
To log GET data, update your
nginx.conf
configuration file to log any GET data to your
access.log
log file:
http {
log_format custom_get_log '$remote_addr - $remote_user [$time_local] '
'"$request" $status '
'"$http_host" '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log custom_get_log;
}
It's important to note the following:
- The
log_format
andaccess_log
parameters must be placed inside thehttp {}
block directive.
You can format the GET data as needed:
'$time_local "$request" $status '
'"$http_referer" '
'"$http_user_agent" $request_body';
Logging for parameters
Parameters |
---|
$remote_addr |
$remote_user |
$time_local |
$request |
$status |
$body_bytes_sent |
$http_referer |
$http_user_agent |
$gzip_ratio |
$upstream_connect_time |
$upstream_header_time |
$upstream_response_time |
$request_time |
$ssl_protocol |
$ssl_cipher |
$clientid |