狂奔的蜗牛

nginx 获取post请求的内容

nginx 2016-06-28 10:38:01 浏览:3182 分享
还可以输入1000字

全部回答(1)

最佳回答

⑴如何提取nginx日志中某个字段数据需求是这样的,提取nginx日志中名为'shell'字段的数据,GET或POST数据
配置nginx日志格式:
'$proxy_add_x_forwarded_for-$remote_user[$time_local]"$request"'
'$status$request_body"$http_referer"'
'"$http_user_agent""$http_x_forwarded_for"$request_time$upstream_response_time';
61.164.xxx.xxx,10.16.xx.x–-[13/August/2014:00:00:02+0800]“GET/xxx/xxx?步骤id=32&tid=U%2Bo3c0S&amp&输出=json&语言=zh_CN&session=114047349&dip=10920&diu=00343B30-9EB8-4B43-A978-FF838587E989&diuafa33e989&diuafa3B19E16C0。 B8E&shell=504c450000000000000000000004100&compre ss=false&channel=&adcode=310000&pagenum=1&pagesize=10&sign=C3833277A0E7E9207A0DE5C207A1A16C0704382“-”“xxx-iphone””61.164.xxx.xxx”0.204

218.202.xxx.xxx,123.103.xxx.xxx,10.16.xxx.xxx–-[2014-08-1922:17:08.446671]"POST/xxx/xxx-web/xxxHTTP/1.1″200stepid=15&tid=U753HifVPE0DAOn%2F&output=json&语言=zh_CN&session=114099628&dip=2u97-DB10920D&dip=1092DB42A7&xxx=056a849c70ae57560440ebe&diu2=2DFDB167-1505-4372-AAB5-99D28868DCB5&shell=e3209006950686f6e65352c3205004150504c4500A877appkey=0&adcode=150700&t=0"-""xxx-iphone""218.202.xxx.xxx,123.103.xxx.xxx"0.00120.001
​grep-P'shell'access.log|sed's/\(.*\)&shell=\(.*\)&\(.*\)/\2/g'|awk-F'&''{print$1}'>output.txt
​命令解释:
​grep-P'shell'access.log
​#在日志文件中查找包含关键字“shell”的数据行
​sed's/\(.*\)&shell=\(.*\)&\(.*\)/\2/g'
#sed使用正则表达式搜索,希望能够将每条日志行划分为三组,即'&shell='前面的组、'&shell='和shell值之间的空格以及后面的&作为第二组,后面的字符串作为第三组,\2代表第二组整个字符串被第二组替换。 不过sed的正则表达式是贪婪模式,实际的第三组是&
​awk-F'&''{print$1}'之后的字符串
​#使用&改变字符串分隔,输出第一个结果
Shell脚本命令很多,非常灵活,解决方案也很多。 这不是一个最优的方法,也不是很严格,如果用作重要的脚本命令,则需要更多改进。 问题:如果shellkey在日志中不唯一,则分割结果将是错误的。
#注意:sed正则表达式是贪婪模式

⑵nginx+lua怎样实现http请求的响应访问ngx_lua中NginX内置变量ngx.var.arg_PARAMETER,获取GETPARAMETER参数的内容。
如何从POST请求体中获取数据?
要获取完整的POST请求体数据,可以访问NginX内置变量ngx.var.request_body(注意:由于NginX在处理请求之前默认不会自动读取请求体,当前必须显式使用表单模块-Input-nginx才能从该变量中获取请求正文,否则变量内容将始终为空!)。 如果想要获取POST提交的表单参数,还可以使用form-input-nginx模块来记录解析过程。

2