首页 > nginx > nginx将POST数据写到日志里

nginx将POST数据写到日志里

2020年5月1日 发表评论 阅读评论

NGINX 是一个强大的web服务器,可以很容易的应对高负载的HTTP流量。nginx每处理一个连接,就会记录一条日志信息,包括诸如:IP地址,回复内容大小、http状态码等信息。

某种情况下,需要了解请求内容是什么,特别 POST 请求。 NGINX 默认只支持记录GET请求,对于记录POST请求需要使用额外的模块,例如, Echo module, 这个模块提供很多有用的指令: echo, time, and sleep

记录POST请求我们需要使用到其中的 echo_read_request_body 命令和 $request_body 变量。

源码编译nginx增加echo模块步骤:

1.下载nginx和echo模块的源码:

2.创建 nginx 用户, 用来运行nginx进程:

3.从源码编译安装nginx:

 

现在,nginx已安装完成,可以启动了。启动之前我们需要修改nginx的默认配置文件 /usr/local/nginx/conf/nginx.conf  来记录 HTTP request body 到日志文件。

NGINX 使用 access_log 指令记录多种 HTTP 请求相关的信息,哪些信息会或不会被记录则通过 log_format 指令来设置。Echo 模块通过调用 echo_read_request_body 方法存储 request body 到 request_body 变量中。为了记录 POST 请求体需要在配置文件中修改这些指令:

如果你的系统负载很高,你可以通过提高Linux打开文件数参数的大小来提高 NGINX 的处理能力。通过如下指令增加配置到文件末尾或直接修改相应的配置文件。

终于可以启动nginx并记录POST的请求内容了,运行nginx命令:

测试

修改配置文件增加上面提到的三个配置。

[root@67 nginx]# cd /usr/local/nginx/conf/

[root@67 conf]# vi nginx.conf

测试并重新加载配置文件

[root@67 conf]# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[root@67 conf]# /usr/local/nginx/sbin/nginx -s reload

不带post参数会记录一个短横

[root@67 conf]# curl 127.0.0.1

[root@67 conf]# curl 127.0.0.1

[root@67 conf]# cd ../logs/

[root@67 logs]# tail -f access.log 

-

-

[root@67 logs]# curl -d "site=redis.com.cn" 127.0.0.1

[root@67 logs]# tail -f access.log 

-

-

site=redis.com.cn

排错

1.

checking for getaddrinfo() ... found

configuring additional modules

adding module in /tmp/echo-nginx-module

/tmp/echo-nginx-module/config: line 41: [: !=: unary operator expected

 + ngx_http_echo_module was configured

checking for PCRE library ... not found

checking for PCRE library in /usr/local/ ... not found

checking for PCRE library in /usr/include/pcre/ ... not found

checking for PCRE library in /usr/pkg/ ... not found

checking for PCRE library in /opt/local/ ... not found

./configure: error: the HTTP rewrite module requires the PCRE library.

You can either disable the module by using --without-http_rewrite_module

option, or install the PCRE library into the system, or build the PCRE library

statically from the source with nginx by using --with-pcre=<path> option.

缺少PCRE、ZLIB参考nginx安装教程先安装对应的源码包

2.

checking for OpenSSL library ... not found

checking for OpenSSL library in /usr/local/ ... not found

checking for OpenSSL library in /usr/pkg/ ... not found

checking for OpenSSL library in /opt/local/ ... not found

需要下载opensll包,参考nginx安装

cd /tmp
wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
tar -zxvf openssl-1.1.1g.tar.gz

--with-openssl=/tmp/openssl-1.1.1g

总结,本文主要介绍了如果配置nginx的日志记录功能,以及如何编译、安装、和使用echo模块。

参考:developers.redhat.com/blog/2016/05/23/configuring-nginx-to-log-post-data-on-linux-rhel/

分类: nginx 标签: ,
  1. eason
    2021年4月25日23:39 | #1

    看完了,作者很棒棒

  1. 本文目前尚无任何 trackbacks 和 pingbacks.