在工作中,开发希望能从Nginx日志中获取POST的数据信息,先记录下来

在日志格式后面加上 $request_body 配置信息

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for" $request_body';

在server中添加打印日志的操作

access_log logs/access.log main;

本以为问题解决了,开发有要求在日志中添加上 服务器响应返回的数据

目前的 nginx 是不支持输出 response 报文体的 使用body_filter_by_lua来分配请求报文体给一个nginx变量。下面是一个示例

1:下载安装LuaJIT

# wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz

# tar -xzvf LuaJIT-2.0.2.tar.gz

# cd LuaJIT-2.0.2

# make

出现如下内容表示编译成功

OK Successfully built LuaJIT

make[1]: Leaving directory `/usr/local/src/LuaJIT-2.0.2/src'

==== Successfully built LuaJIT 2.0.2 ====

# make install

出现如下内容,表示安装成功

==== Successfully installed LuaJIT 2.0.2 to /usr/local ====

2:下载准备nginx lua模块

wget https://github.com/chaoslawful/lua-nginx-module/archive/v0.8.6.tar.gz

tar -xzvf lua-nginx-module-0.8.6.tar.gz

mv lua-nginx-module-0.8.6 /usr/local/src/lua-nginx-module-0.8.6

3:安装nginx

tar zxf nginx-1.16.1.tar.gz

cd nginx-1.16.1

//先导入环境变量,告诉nginx去哪里找luajit

export LUAJIT_LIB=/usr/local/lib

export LUAJIT_INC=/usr/local/include/luajit-2.0

./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/lua-nginx-module-0.8.6 --with-http_ssl_module --with-http_stub_status_module --with-pcre

make j2

make install

常见错误处理:

/usr/local/nginx-1.4.2/sbin/nginx -v

./objs/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

解决方法:

# ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2

4:配置Nginx

nginx配置文件加入如下配置:

location /test {

default_type 'text/plain';

content_by_lua 'ngx.say("hello, ttlsa lua")';

}

5:访问测试

curl http://127.0.0.1/test

hello, ttlsa lua //使用curl测试,返回数据表示安装成功

6:Nginx日志配置

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for" $request_body resp_body:"$resp_body"';

在server中添加相应的配置:

lua_need_request_body on;

set $resp_body "";

body_filter_by_lua '

local resp_body = string.sub(ngx.arg[1], 1, 1000)

ngx.ctx.buffered = (ngx.ctx.buffered or"") .. resp_body

if ngx.arg[2] then

ngx.var.resp_body = ngx.ctx.buffered

end

';

如下事例:

server {

listen 443 ssl;

server_name xxxx.com;

# ssl on;

ssl_certificate /usr/local/nginx/conf/keys/public.pem;

ssl_certificate_key /usr/local/nginx/conf/keys/private.key;

ssl_session_cache shared:SSL:1m;

ssl_session_timeout 5m;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!3DES:!aNULL:!eNULL;

ssl_prefer_server_ciphers on;

lua_need_request_body on;

set $resp_body "";

body_filter_by_lua '

local resp_body = string.sub(ngx.arg[1], 1, 1000)

ngx.ctx.buffered = (ngx.ctx.buffered or"") .. resp_body

if ngx.arg[2] then

ngx.var.resp_body = ngx.ctx.buffered

end

';

location / {

proxy_pass http://127.0.0.1:8080;

proxy_redirect off ;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header REMOTE-HOST $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header User-Agent $http_user_agent;

proxy_set_header Referer $http_referer;

client_max_body_size 50m;

client_body_buffer_size 256k;

proxy_connect_timeout 300;

proxy_send_timeout 300;

proxy_read_timeout 300;

proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;

proxy_max_temp_file_size 128m;

proxy_buffer_size 512k;

proxy_buffers 16 512k;

proxy_busy_buffers_size 512k;

proxy_temp_file_write_size 512k;

}

access_log /tmp/faceauth.log main;

}

启动Nginx,打印日志,就可以看到相关数据。

以上,是打印POST数据的一种方法,比较麻烦,下面介绍一种比较简单的方法:

在日志中添加“$request_body”,由于现实原因,需要添加  escape=json  转换为json格式

log_format access escape=json '$remote_addr - $remote_user [$time_local] "$request" - "$request_body" '

'"$status" $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for" '

'"$upstream_addr" "$upstream_status" "$request_time" "$upstream_response_time" $bytes_sent $request_length';

利用 ELK系统分析Nginx日志并对数据进行可视化展示

一.写在前面 结合之前写的一篇文章:Centos7 之安装Logstash ELK stack 日志管理系统,上篇文章主要讲了监控软件的作用以及部署方法.而这篇文章介绍的是单独监控nginx 日志分析 ...

ELK系统分析Nginx日志并对数据进行可视化展示

结合之前写的一篇文章:ELK日志分析平台搭建全过程,上篇文章主要讲了部署方法.而这篇文章介绍的是单独监控nginx 日志分析再进行可视化图形展示. 本文环境与上一篇环境一样,前提 elasticsea ...

Nginx 日志记录post数据,并使用goaccess进行日志分析

nginx日志默认不会记录post数据 在nginx配置文件的http节 log_format 日志格式标识 [escape=json] 日志格式 比如:日志格式标识设置为main,添加escape= ...

nginx 日志打印响应时间 request_time 和 upstream_response_time

设置log_format,添加request_time,$upstream_response_time,位置随意 og_format  main  '"$request_time" ...

nginx日志打印请求响应时间

log_format  timed_combined  '$remote_addr - $remote_user [$time_local] "$request" ' '$stat ...

nginx 日志打印post请求参数

在日志格式后面加上 $request_body 配置信息 log_format main '$remote_addr - $remote_user [$time_local] "$reque ...

Centos7 搭建 Flume 采集 Nginx 日志

版本信息 CentOS: Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x ...

nginx1.14.0日志打印

nginx日志打印 http属性log_format来设置日志格式 ,参考 https://www.jb51.net/article/52573.htm  ...

ELK+Redis+Nginx服务数据存储以及Nginx日志的收集

PS:此片文章是承接上篇ELK部署文档,再次便不详细说明了 [安装Redis] [root@Redis ~]# wget  http://download.redis.io/releases/redi ...

随机推荐

基于python的接口测试学习笔记一(初出茅庐)

第一次写博客笔记,讲一下近来学习的接口自动化测试.网上查阅了相关资料,最后决定使用python语言写接口测试,使用的是python的第三方库requests.虽然python本身标准库中的 urlli ...

什么是 gnuplot

Gnuplot是一个命令行的交互式绘图工具(command-driven interactive function plotting program).用户通过输入命令,可以逐步设置或修改绘图环境,并 ...

Android OpenGL 入门示例----绘制三角形和正方形

Android上对OpenGl的支持是无缝的,所以才有众多3D效果如此逼真的游戏,在Camera的一些流程中也有用到GLSurfaceView的情况.本文记录OpenGL在Android上的入门级示例 ...

Java之面向对象例子(三) 多态,重写,重载,equals()方法和toString()方法的重写

重写(继承关系) 子类得成员方法和父类的成员方法,方法名,参数类型,参数个数完全相同,这就是子类的方法重写了父类的方法. 重载 在一个类里有两个方法,方法名是完全一样的,参数类型或参数个数不同. 例子 ...

Linux slave配置

说明:master机器为Windows,现将一台Linux机器作为slave进行配置.这台Linux机器为CentOS. 1.在Linux slave上的配置 ①创建名为jenkins用户 #sudo ...

java 诊断工具——Arthas

该说不说!小编做的这些功能,最讨厌的就是优化!某些前辈大佬写的代码小辈我实在不敢恭维!那逻辑!那sql! 接下来!今天的主角就登场了,阿里巴巴最近开源出来的一个针对 java 的工具,主要是针对 ja ...

hdu-4180-exgcd

RealPhobia Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

创建xml树

XMLElement 节点XMLDocument 节点的CUID操作 XMLNode 抽象类 操作节点 (XMLElement XMLDocument ) XElement xElement = ne ...

Linux各主要发行版的包管理命令对照

Linux各主要发行版的包管理命令对照 Debian使用的是apt和dpkg,Gentoo则用的是emerge,Redhat的yum.Suse的zypper.Arch的pacman.Slackware ...

JSTL的基本使用

nginx直接打印输出_Nginx 日志打印POST数据相关推荐

  1. nginx直接打印输出_ngnix配置打印请求入参和出参消息

    背景:由于自动化接口测试过程,频繁面临着接口发生变更,目前测试人力根本无法投入去及时处理,因为需要考虑一种便捷的方式,能快速的自动更新报文,甚至能自动的生成自动化测试用例,这个过程中的关键是要把手工触 ...

  2. log nginx 显示时间_nginx日志时间添加毫秒显示

    nginx默认日志格式中,时间只有年月日时分秒,没有到毫秒级别 # 修改前 log_format main '$remote_addr - $remote_user [$time_local] &qu ...

  3. 【lnmp+ELK+Nginx+GeoIP】超详细新版ELK8.5.0解析收集Nginx日志并实现数据可视化与IP地址地图可视化教程-2022年11月版

    超详细新版ELK8.5.0+lnmp1.9解析收集Nginx日志并实现数据可视化与IP地址地图可视化教程-2022年11月版 前言 1.基础环境和所需要的软件包 1.1服务器配置(仅供参考) 1.2 ...

  4. ELK 集群 + Redis 集群 + Nginx ,分布式的实时日志(数据)搜集和分析的监控系统搭建,简单上手使用

    简述 ELK实际上是三个工具的集合,ElasticSearch + Logstash + Kibana,这三个工具组合形成了一套实用.易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台. 官 ...

  5. 从零构建通讯器--4.3日志打印实战,捋下main函数的调用顺序

    文章目录 一:基础设施之日志打印实战代码一 (1)新文件 (2)(//ngx_log_stderr() :三个特殊文件描述符[三章七节] (3)printf的例子说明 (4)ngx_log_stder ...

  6. 日志打印、main函数中代码执行顺序

    文章目录 1.设置时区 2.日志打印 3.main函数中代码执行顺序 1.设置时区 我们要设置成 CST 时区,以保证正确地显示日期.时间. 我们常看到的时区有如下几个: PST:美国太平洋标准时间, ...

  7. springboot filter and interceptor实战之mdc日志打印

    1.1  mdc日志打印全局控制 1.1.1    logback配置 <property name="log.pattern" value="%d{yyyy-MM ...

  8. 控制台打印_SpringBoot2.0 基础案例(02):配置Log4j2,实现不同环境日志打印

    一.Log4j2日志简介 日志打印是了解Web项目运行的最直接方式,所以在项目开发中是需要首先搭建好的环境. 1.Log4j2特点 1)核心特点 相比与其他的日志系统,log4j2丢数据这种情况少:d ...

  9. 有关日志打印的几点经验

    前段时间,完善智能导航发送告警短信中短信太长接收不到的bug,牵涉出了日志打印的问题:日志打印这件事说小事小,说大也大,写好日志能方便自己调试代码和发现解决问题,以下就是有关日志打印自己总结的几点经验 ...

  10. nginx如何开启debug日志及相关配置

    之前在测试支持HTTP3的nginx服务器时遇到了一些问题,希望能够通过nginx的error.log日志进行排查(error.log有debug级别的日志),但是配置后并没有生效,从官网查找了下关于 ...

最新文章

  1. 垂直电商架构进化之路
  2. 皮一皮:我真的没买这么多...
  3. 家庭扫地机器人竞争升级 带手臂提供移动服务或是未来方向
  4. [机器学习]AutoML --- AutoKeras
  5. 教你如何在linux 下批量卸载
  6. 写一个简单易用可扩展vue表单验证插件(vue-validate-easy)
  7. Linux实时/高性能任务独占CPU的操作
  8. mybatis实战总结
  9. java 随机生成图_java – 如何生成随机图?
  10. Redis主从架构和哨兵架构模式
  11. RHEL脚本更换YUM源(sohu)
  12. 视频app scheme参数和app name
  13. java代码无限弹窗制作_vbs无限弹窗制作方法
  14. 忘记电脑密码的解决方法——使用pe工具重置电脑密码
  15. ActivityManager: Waited long enough for: ServiceRecord 问题解决
  16. SpringBoot+Beetlsql代码生成
  17. k8s二进制安装部署(详细)
  18. MNIST数据集手写数字分类
  19. java实现在线预览word,excel,ppt文档
  20. jieba分词库、WordCloud词云库、requests库

热门文章

  1. 安防网络摄像头海康大华硬盘录像机视频流媒体服务器EasyNVR调用接口时提示未授权问题解决方案
  2. 论文插入参考文献神器——EndNote(包括EndNoteX9安装和破解)
  3. Iphone8如何投屏到电脑 苹果手机投屏到电脑
  4. C/C++中使用PlaySound()播放音乐
  5. 如何区分冲突域和广播域?
  6. html编辑器pp,在线轻设计工具之H5
  7. [c51单片机]利用Protues 仿真C51单片机8位数码管
  8. 安装系统user服务器登录失败,win10系统开机提示user profile service服务器登录失败的解决方法...
  9. d3.js 旋转图形_PROE、Creo绘制手轮图形案例,二维草图绘制练习项目
  10. Idea打包Jar文件