还是老规矩先说明一下业务需求:
领导要求我装一台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请求
a:修改的配置如下
上网查,看到有人说增加request_body,所以增加了request_body
b:发送post请求
发现返回405状态码
c:查看日志
发现日志记录到了请求,但是没有任何post的数据
d:上网查找解决办法,有人说将405状态码改为200即可:
1:在server中增加如下配置如下
2:再次post数据
没有405状态码,貌似是可以了
3:查看日志
日志还是没有数据,看来此方法行不通。
总结:以上的方法都是我在安装配置过程踩过的坑,或许有些地方是我个人的操作问题导致了不能正确的接受数据,接下来我要给大家分享的是我现在使用的方法
四:由于上面的方法行不通,所以要换方法。一开始上传的源码包到现在还有三个没用到,现在就是他们该上场的时候了。
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结尾的请求
查看日志:
正确记录了数据。
参考博客:http://blog.csdn.net/jom_ch/article/details/15359129