经过两三天的奋斗, 终于搞定 nginx log post 数据的问题
首先 nginx 除了在 proxy_pass 或 fastcgi_pass 的 Location 中读取 request_body 之外, 都不会读取 post 数据所以此处必须借助 NginxLua 模块参见 http://www.cnblogs.com/meteorx/p/3188647.html, 但是几经折腾还是不行
- location ^~ /offline
- {
- lua_need_request_body on;
- client_max_body_size 50k;
- client_body_buffer_size 50k;
- content_by_lua 'ngx.log(ngx.var.request_body)';
- access_log /opt/data/log/m_offline/nginx_access.log pv_offline;
- return 204;
- }
最后在 http://chaoslawful.iteye.com/blog/730463 中找到了答案: 由于 NginX 默认在处理请求前不自动读取 request body, 所以目前必须显式借助 form-input-nginx 模块才能从该变量得到请求体, 否则该变量内容始终为空!
- location ^~ /offline
- {
- lua_need_request_body on;
- set_form_input $data;
- client_max_body_size 50k;
- client_body_buffer_size 50k;
- content_by_lua 'ngx.log(data)';
- access_log /opt/data/log/m_offline/nginx_access.log pv_offline;
- return 204;
- }
安装:
- export LUAJIT_LIB=/root/nginx_model/lua/lib
- exportLUAJIT_INC=/root/nginx_model/lua/include/luajit-2.0
- ./configure--prefix=/root/nginx_model/nginx --with-http_realip_module--with-http_stub_status_module --with-http_ssl_module --with-zlib=/root/nginx_model/tools/zlib/1.2.3--with-openssl=/root/nginx_model/tools/openssl --with-pcre=/root/nginx_model/tools/pcre-8.12--add-module=/root/nginx_model/tools/nginx-upload-progress-module-0.9.0--add-module=/root/nginx_model/tools/ngx_cache_purge-1.3--add-module=/root/nginx_model/tools/headers-more-nginx-module-0.25 --add-module=/root/nginx_model/tools/ngx_devel_kit-0.2.19--add-module=/root/nginx_model/tools/echo-nginx-module-0.49 --add-module=/root/nginx_model/tools/lua-nginx-module-0.9.5rc2--add-module=/root/nginx_model/tools/form-input-nginx-module-0.07
注意:--with-zlib 是源码安装 --add-module 也是源码安装
来源: http://blog.csdn.net/fanshadoop/article/details/21155701