nginx接受post数据,并在日志里记录数据

还是老规矩先说明一下业务需求:

领导要求我装一台nginx,做开发的同事向我提供的接口post数据,然后我要把数据记录在nginx日志里面,然后通过flume存到HDFS,post数据为json格式。

 

一:将所需要的安装包上传到/usr/local/src目录下

 

-rw-r--r--. 1 root root  841399 6月  23 02:20 LuaJIT-2.0.1.tar.gz
-rw-r--r--. 1 root root  613539 6月  23 02:20 lua-nginx-module-0.10.9rc5.tar.gz
-rw-r--r--. 1 root root  804164 6月  23 02:20 nginx-1.6.2.tar.gz
-rw-r--r--. 1 root root   66455 6月  23 02:20 ngx_devel_kit-0.3.0.tar.gz
-rw-r--r--. 1 root root 4457113 6月  23 02:20 openssl-1.0.1c.tar.gz
-rw-r--r--. 1 root root 1933734 6月  23 02:20 pcre-8.34.tar.gz
-rw-r--r--. 1 root root  571091 6月  23 02:20 zlib-1.2.8.tar.gz


二:安装nginx

 

a:安装g++、make基础包,为编译安装提供依赖

 

[root@hadoop src]# yum -y install gcc automake autoconf libtool make gcc-c++
 Complete!
[root@hadoop src]# 


b:安装pcre库

 

 

[root@hadoop src]# tar -zxvf pcre-8.34.tar.gz
[root@hadoop src]# cd pcre-8.34
[root@hadoop pcre-8.34]# ./configure
[root@hadoop pcre-8.34]# make &&make install


c:安装zlib库

 

 

[root@hadoop src]# tar zxvf zlib-1.2.8.tar.gz
[root@hadoop src]# cd zlib-1.2.8
[root@hadoop zlib-1.2.8]#  ./configure 
[root@hadoop zlib-1.2.8]# make &&make install

d:解压ssl[不用再编译安装]

 

[root@hadoop src]# tar zxvf openssl-1.0.1c.tar.gz

e:安装nginx

 

 

[root@hadoop src]# tar -zxvf nginx-1.6.2.tar.gz
[root@hadoop nginx-1.6.2]# cd nginx-1.6.2
[root@hadoop nginx-1.6.2]# ./configure --sbin-path=/usr/local/nginx/sbin/nginx \
> --conf-path=/usr/local/nginx/conf/nginx.conf \
> --http-log-path=/usr/local/nginx/logs/error.log \
> --error-log-path=/usr/local/nginx/logs/access.log \
> --pid-path=/usr/local/nginx/logs/nginx.pid \
> --with-http_ssl_module \
> --with-pcre=/usr/local/src/pcre-8.34 \
> --with-zlib=/usr/local/src/zlib-1.2.8 \
> --with-openssl=/usr/local/src/openssl-1.0.1c
[root@hadoop nginx-1.6.2]# make &&make install

f:启动nginx

 

 

[root@hadoop nginx-1.6.2]# cd /usr/local/nginx/sbin/
[root@hadoop sbin]# ./nginx 
[root@hadoop sbin]# 

g:检查nginx是否正确安装

 

nginx接受post数据,并在日志里记录数据_第1张图片
nginx接受post数据,并在日志里记录数据_第2张图片


安装成功!!!!!!

三:检测nginx是否能接受post请求

a:修改的配置如下

nginx接受post数据,并在日志里记录数据_第3张图片

上网查,看到有人说增加request_body,所以增加了request_body

nginx接受post数据,并在日志里记录数据_第4张图片
自定义了日志的输出位置和输出格式

b:发送post请求

nginx接受post数据,并在日志里记录数据_第5张图片

发现返回405状态码

c:查看日志

发现日志记录到了请求,但是没有任何post的数据

d:上网查找解决办法,有人说将405状态码改为200即可:

1:在server中增加如下配置如下

nginx接受post数据,并在日志里记录数据_第6张图片

2:再次post数据

nginx接受post数据,并在日志里记录数据_第7张图片

没有405状态码,貌似是可以了

3:查看日志

nginx接受post数据,并在日志里记录数据_第8张图片

日志还是没有数据,看来此方法行不通。
总结:以上的方法都是我在安装配置过程踩过的坑,或许有些地方是我个人的操作问题导致了不能正确的接受数据,接下来我要给大家分享的是我现在使用的方法

四:由于上面的方法行不通,所以要换方法。一开始上传的源码包到现在还有三个没用到,现在就是他们该上场的时候了。

a:安装LuaJIT

 

[root@hadoop src]# tar -zxvf LuaJIT-2.0.1.tar.gz
[root@hadoop src]# cd LuaJIT-2.0.1
[root@hadoop LuaJIT-2.0.1]# make
[root@hadoop LuaJIT-2.0.1]# make install

 

注意一下安装位置

b:解压ngx_devel_kit-0.3.0.tar.gz、 lua-nginx-module-0.10.9rc5.tar.gz这两个包到/usr/loacal/src目录下(目录可以自己指定)
c:重新编译nginx

 

[root@hadoop src]# cd nginx-1.6.2
[root@hadoop nginx-1.6.2]# export LUAJIT_LIB=/usr/local/lib
[root@hadoop nginx-1.6.2]# export LUAJIT_INC=/usr/local/include/luajit-2.0
[root@hadoop nginx-1.6.2]# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/ngx_devel_kit-0.3.0 --add-module=/usr/local/src/lua-nginx-module-0.10.9rc5
[root@hadoop nginx-1.6.2]# make&&make install

d:启动nginx

 

 

[root@hadoop nginx-1.6.2]# cd /usr/local/nginx/sbin/

 

 

[root@hadoop sbin]# ./nginx
./nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

解决办法:

 

 

[root@hadoop sbin]# find / -name libluajit-5.1.so.2
/usr/local/lib/libluajit-5.1.so.2
[root@hadoop sbin]# ln -s /usr/local/lib/libluajit-5.1.so.2  /lib64/libluajit-5.1.so.2

其他一样

 

 

[root@hadoop sbin]# ./nginx
./nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
[root@hadoop sbin]# find / -name libpcre.so.1
/usr/local/lib/libpcre.so.1
[root@hadoop sbin]# ln -s /usr/local/lib/libpcre.so.1  /lib64/libpcre.so.1

通过web页面访问是否安装成功,安装成功。

 

e:修改配置文件(注释掉之前405的代码)

添加以下代码

 

#app post data location
location ~ \.gif$ {
root           html;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
#fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
fastcgi_param  SCRIPT_FILENAME  /data/webapps$fastcgi_script_name;
#include        fastcgi_params;
lua_need_request_body on;
content_by_lua 'local s = ngx.var.request_body';
# log_format post_log '$remote_addr - $request_body';
access_log  /logs/app_post.log  post;
}

f:重启nginx

 

五:检查是否可以正确接受post数据

 

[root@hadoop include]# curl  -d  "username=qujun&passwd=xixi"  http://192.168.145.111/index.gif

以.gif结尾,因为上面的location只能拦截以.gif结尾的请求

 

查看日志:

nginx接受post数据,并在日志里记录数据_第9张图片
正确记录了数据。
参考博客:http://blog.csdn.net/jom_ch/article/details/15359129








 

 

你可能感兴趣的:(nginx)