1.1 在nginx.conf中http里面添加配置如下:
http { ... log_format postdata escape=json '$remote_addr - $remote_user [$time_local] "$request" '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" "$request_body"'; upstream bk_server { server 127.0.0.1:12345; } server { listen 12345; location / { proxy_pass http://bk_server/test; access_log /var/log/nginx/post.log postdata; } location /test { return 202; } } ... }
检查nginx配置语法有无错误
nginx -t
若无语法错误,则reload nginx配置,使最新的nginx配置生效
nginx -s reload
1.2 使用curl命令模拟post请求
curl -i -d "arg1=1&arg2=2&hi=你好" "http://127.0.0.1:12345"
查看日记:
tail -n 10 /var/log/nginx/post.log
得到结果:
...省略其他参数的值... "arg1=1&arg2=2&hi=你好"
2.说明如果nginx装在公网服务器上,那么请将127.0.0.1换成公网ip
2.1 log_format配置
log_format官方文档
log_format 语法:
log_format name [escape=default|json|none] string ...;
- postdata: 名称
- escape=json: 在配置日志格式时加上此参数可以不转义变量内容,这里为了显示POST body里面的中文。(escape参数,到版本1.11.8才有,escape参数的none值到1.13.10版本才有)
- $request_body: 只有location中用到proxy_pass,fastcgi_pass,scgi_pass命令时,该变量才有值。request_body官网文档
英文描述如下:
request_body
The variable’s value is made available in locations processed by the proxy_pass, fastcgi_pass, uwsgi_pass, and scgi_pass directives when the request body was read to a memory buffer.
2.2 bk_server
bk_server是为了使用proxy_pass而设置的。
3.显示HTTPS里面的POST body(可选)如网站已使用HTTPS,那么配置如下:
3.1 除了需要把access_log那一行注释掉之外,步骤1中的配置不变。
3.2 其他配置如下
server { # Redirect all http requests to https. listen 80 default_server; listen [::]:80 default_server; server_name _; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name www.your_domain your_domain; ... # Record POST body location /post { proxy_pass http://127.0.0.1:12345; access_log /var/log/nginx/post.log postdata; #这里设置之后,需要把步骤1里面的access_log那一行注释掉 } ... }
检查nginx配置语法有无错误
nginx -t
若无语法错误,则reload nginx配置,使最新的nginx配置生效
nginx -s reload
使用curl命令模拟post请求
curl -i -d "arg1=1&arg2=2&hi=你好" "https://your_domain/post"
查看日记:
tail -n 10 /var/log/nginx/post.log
得到结果:
...省略其他参数的值... "arg1=1&arg2=2&hi=你好"