nginx直接打印输出_Nginx设置日志打印post请求参数的方法

本文介绍了如何配置Nginx以打印POST请求参数,包括在nginx.conf中设置log_format,以及如何解决打印过程中的乱码问题。通过这些设置,可以更全面地记录访问者信息,便于问题排查和系统性能优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【前言】

我们项目的短信功能是接第三方,原来对接第三方给我们回执确认请求是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设置日志打印post请求参数的方法的文章就介绍到这了,更多相关Nginx 日志打印post请求参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

### 宝塔面板 Nginx 配置 POST 请求日志记录方法 要在宝塔面板中配置 Nginx 记录 POST 请求日志,可以通过以下方式实现: #### 自定义日志格式 在 Nginx 的 `http` 块中定义一个新的日志格式。通过修改宝塔面板的 Nginx 配置文件来完成此操作。 ```nginx log_format post_log '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' '$request_body'; # 添加这一项用于记录 POST 数据[^2] ``` 上述代码中的 `$request_body` 是用来捕获 POST 请求体的数据。需要注意的是,默认情况下 Nginx 并不会自动保存请求体到日志中,因此需要额外处理才能启用该功能。 #### 修改站点配置文件 进入宝塔面板后,在 **网站管理 -> 设置 -> 配置文件** 中找到对应站点的 Nginx 配置部分。通常路径位于 `/www/server/panel/vhost/nginx/*.conf` 文件下。在此处添加或调整访问日志的相关设置如下所示: ```nginx access_log /www/wwwlogs/post_access.log post_log; ``` 这里指定新的日志文件存储地址以及刚刚创建好的名为 `post_log` 的自定义日志格式名称。 #### 启用 Lua 模块 (可选) 由于标准版 Nginx 不支持直接写入完整的 POST 参数日志当中,所以可能还需要借助第三方插件如 lua-nginx-module 来增强其能力[^1]。具体做法是在编译安装时加入这个模块或者利用已有的集成环境(比如某些版本的宝塔自带)。之后可以编写简单的脚本来提取并打印出更多的细节信息。 #### 测试与验证 完成以上步骤以后记得重启服务使改动生效: ```bash service nginx restart ``` 随后发送一些测试性的 POST 请求给服务器端口,并检查新产生的日志文件里是否有预期的结果展示出来。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值