nginx日志中添加请求的response日志

换个新公司,做一些新鲜的事情,经过一天的琢磨,终于成功添加response日志

在nginx的日志中添加接口response的日志

由于此功能在nginx内置的功能中没有,需要安装第三方模块ngx_lua,由于此模块需要Lua语言,所以需要安装相应的Lua语言包

1. 下载安装LuaJIT

# cd /usr/local/src # 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模块 # cd /usr/local/src # wget https://github.com/chaoslawful/lua-nginx-module/archive/v0.8.6.tar.gz # tar -xzvf v0.8.6

3. 安装nginx # cd /usr/local/src/ # wget http://nginx.org/download/nginx-1.4.2.tar.gz # tar -xzvf nginx-1.4.2.tar.gz # cd nginx-1.4.2 //先导入环境变量,告诉nginx去哪里找luajit # export LUAJIT_LIB=/usr/local/lib # export LUAJIT_INC=/usr/local/include/luajit-2.0 # ./configure --prefix=/usr/local/nginx-1.4.2 --add-module=../lua-nginx-module-0.8.6 # make -j2 # make install

4.测试安装是否成功

# cd /usr/local/nginx-1.4.2/conf/

# vi nginx.conf

lua指令方式

在server 中添加一个localtion

location /hello {
            default_type 'text/plain';
            content_by_lua 'ngx.say("hello, lua")';
        }

然后启动nginx

# cd /usr/local/nginx-1.4.2/sbin

# ./nginx

浏览器访问:

http://127.0.0.1/hello

显示:hello, lua

注意点:

1.注意每个模块的安装目录不能出现差错

2.如果之前通过apt-get方式安装了nginx,需要先删除nginx,因为此方式下载的软件无法编译

3.

到此说明第三方安装成功,

5.下面开始添加日志

http {
    log_format  mylog 'response_body:$resp_body';

    server {
        #记录nginx请求返回值
        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:5000;
            access_log /var/log/nginx/access.log mylog;
         }
    }
}

到此便成功添加response日志。

如果懂Lua语言的,可以对如下代码进行修改,来更加符合自己的要求。

        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
        ';

日志输出时,会发现语言响应结果涉及到字符汉字的时候转为16进制导致无法识别。

部分响应日志如下:

response_body:    {\x22code\x22: 404, \x22message\x22: \x22\xE8\xAF\xB7\xE6\xB1\x82\xE7\x9A\x84\xE8\xB5\x84\xE6\xBA\x90\xE4\xB8\x8D\xE5\xAD\x98\xE5\x9C\xA8\x22, \x22data\x22: {}}

可通过复制到python脚本进行解决。

str1='''
{\x22code\x22: 404, \x22message\x22: \x22\xE8\xAF\xB7\xE6\xB1\x82\xE7\x9A\x84\xE8\xB5\x84\xE6\xBA\x90\xE4\xB8\x8D\xE5\xAD\x98\xE5\x9C\xA8\x22, \x22data\x22: {}}
'''
print(str1.encode('raw_unicode_escape').decode('utf-8'))

输入结果为:

{"code": 404, "message": "请求的资源不存在", "data": {}}

参考网址:

https://www.cnblogs.com/aoeiuv/p/6856056.html

http://www.ttlsa.com/nginx/nginx-modules-ngx_lua/

https://blog.csdn.net/rona_lin/article/details/45028277

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏运维咖啡吧

LDAP落地实战(一):OpenLDAP部署及管理维护

上边来了一堆的名词解释,看的云里雾里,还不是很明白,怎么跟自己的组织架构对应起来呢?看看下边的图是不是清晰明了

2153
来自专栏信安之路

【好文推荐】各种提权姿势总结

1.cmd拒绝访问就自己上传一个cmd.exe,自己上传的cmd是不限制后缀的,还可以是cmd.com cmd.txt cmd.rar等

2061
来自专栏梦里茶室

【Chromium中文文档】跨进程通信 (IPC)

概览 Chromium有一个多进程架构,这意味着我们有许多需要互相交流的进程。我们的主要跨进程交流元素是命名管道。在Linux和OS X上,我们使用socket...

2546
来自专栏LinkedBear的个人空间

运用Oltu框架搭建OAuth的Demo工程 转

http://jinnianshilongnian.iteye.com/blog/2038646

1084
来自专栏DannyHoo的专栏

友盟推送使用别名(Alias)推送到具体用户

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

3005
来自专栏FreeBuf

渗透测试TIPS之删除、伪造Linux系统登录日志

0x00. 引言 擦除日志在渗透测试中是非常重要的一个阶段,这样可以更好地隐藏入侵痕迹,做到不被系统管理人员察觉,实现长期潜伏的目的。 前段时间NSA泄露的渗透...

4606
来自专栏惨绿少年

KICKSTART无人值守安装

1.1 环境说明 [root@test ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [roo...

2520
来自专栏耕耘实录

CentOS7.5-1804系统内核升级

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

2183
来自专栏好好学java的技术栈

微信公众号支付开发全过程(java版)

首先我们到微信支付的官方文档的开发步骤(https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3...

951
来自专栏腾讯云容器服务团队的专栏

腾讯云容器服务集群中安装 dashboard ui

目前 CCS 控制台暂时不支持 Job, Pod, CronJob 等对象的展示。有通过 web 界面查看这些类型对象的需求的话,可以自行安装 k8s dash...

1.6K21

扫码关注云+社区