您当前的位置:首页 > 网站建设 > 网站维护
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax | jQuery |

Nginx设置日志打印post请求参数的方法

51自学网 2022-07-04 11:37:52
  网站维护

【前言】

        我们项目的短信功能是接第三方,原来对接第三方给我们回执确认请求是get请求我们在排查问题的时候可以通过nginx的日志拿到对方给我们请求的参数;最近我们换了另外一家第三方,新的第三方给我们的确认请求是post,遇到问题排查,发现nginx没有打印具体参数,于是查阅一些资料和运维一起做了实验和线上调整,调整后我们可以拿到请求参数,更方便我们排查问题;

【Nginx设置打印post请求参数】

           一、Nginx配置文件(nginx.conf)设置打印post请求参数:在http模块的log_format中增加 "dm":$request_body 防止中文乱码,增加  escape=json

 log_format main escape=json '{ "@timestamp": "$time_iso8601", '            '"remote_addr": "$remote_addr",'            '"costime": "$request_time",'            '"realtime": "$upstream_response_time",'            '"status": $status,'            '"x_forwarded": "$http_x_forwarded_for",'            '"referer": "$http_referer",'            '"request": "$request",'            '"upstr_addr": "$upstream_addr",'            '"bytes":$body_bytes_sent,'            '"dm":$request_body,'            '"agent": "$http_user_agent" }';   access_log /var/log/nginx/access.log main;

           二、设置前后的效果对比

                  1、发送请求的json格式

{  "results":[    {   "price":{        "pricePerMessage":0.01,        "currency":"aaa"      },      "messageId":"ff4804ef-6ab6-4abd-984d-ab3b1387e852",      "to":"385981178",      "sentAt":"2015-02-12T09:58:20.323+0100",      "doneAt":"2015-02-12T09:58:20.337+0100",      "smsCount":1,      "status":{        "id":5,        "groupId":3,        "groupName":"DELIVERED",        "name":"DELIVERED_TO_HANDSET",        "description":"Message delivered to handset"      },      "error":{        "groupId":0,        "groupName":"OK",        "id":0,        "name":"NO_ERROR",        "description":"No Error",        "permanent":false      }    }  ]}

                  2、设置前post请求,nginx打印的结果,很显然没有将参数打印出来

                  3、设置后post请求,nginx打印参数,发现参数虽然打印出来但是有乱码情况

                  4、解决乱码

                      (1)需要在log_format main后加 escape=json

                      (2)nginx的版本需要是1.15.1及以上

                      (3)满足以上最终打印出的结果

           三、看nginx日志必要性

                  1、更加全面:它可以记录访问者的ip浏览器以及请求参数等信息比java的请求日志更加全面;

                  2、请求大时,java程序处理不过来,这时java日志没有多余访问请求,而nginx中有,有利于排查问题,优化系统性能。

【总结】

        1、通过日志可以快速定位问题;

        2、排查问题时考虑要全面,从多过维度去思考。


下载地址:
nginx基于域名,端口,不同IP的虚拟主机设置的实现
详解使用阿里云镜像仓库构建国外Docker镜像
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1