nginx 获取 post body值
来源:互联网 发布:淘宝无名体育发货慢 编辑:程序博客网 时间:2024/06/06 11:42
1.现象
在nginx中想利用$request_body命令获取post请求的body参数,并落日志,但是发现该变量值为空,查看官网中对$request_body的描述如下:
$request_body
request body
The variable’s value is made available in locations processed by the proxy_pass, fastcgi_pass, uwsgi_pass, and scgi_pass directives when the request body was read to a memory buffer.
意思是只有location中用到proxy_pass,fastcgi_pass,scgi_pass命令时,该变量才有值。
2.使用proxy_pass,fastcgi_pass, scgi_pass等命令获取$request_body值
试了下用proxy_pass,的确可以。配置如下:
worker_processes 1; #nginx worker 数量error_log logs/error.log; #指定错误日志文件路径events { worker_connections 1024;}http { log_format dm ' "$request_body" '; upstream bk_servers_2 { server 127.0.0.1:6699; } server { listen 6699; location /post/ { proxy_pass http://bk_servers_2/api/log/letv/env; access_log /home/shuhao/openresty-test/logs/post.log dm; } location /api/log/letv/env { return 202; } }}使用curl命令模拟post请求
curl -i -d "arg1=1&arg2=2" "http://127.0.0.1:6699/post/"
日志用打印出结果:
"arg1=1&arg2=2"
3.使用lua获取$request_body值
条件:使用openresty或者nginx编译了lua模块。
方法:
server中使用lua_need_request_body on; 或者在location lua代码块中使用 ngx.req.read_body()
注意:
1)lua代码块中必须有执行语句,否则lua不执行,无法获取request_body;
2)不要使用return 200;等命令,有return命令,lua代码不执行。
worker_processes 1; #nginx worker 数量error_log ~/openresty-test/logs/error.log debug; #指定错误日志文件路径events { worker_connections 1024;}http { log_format dm '"$request_body"'; lua_need_request_body on; server { listen 6699; location /post/ { content_by_lua ' ngx.say("-------") ngx.req.read_body() '; access_log ~/openresty-test/logs/post.log dm; #return 200; } }}
4. 自定义变量存放request body
方法:
1)在server 块中使用set $resp_body ""; 声明变量;
2)在location使用 ngx.var.resp_body = ngx.req.get_body_data() or "-" 为变量赋值
worker_processes 1; #nginx worker 数量error_log /home/shuhao/openresty-test/logs/error.log debug; #指定错误日志文件路径events { worker_connections 1024;}http { log_format dm ' "$request_body" -- "$resp_body"'; lua_need_request_body on; server { listen 6699; set $resp_body ""; location /post/ { lua_need_request_body on; content_by_lua ' local resp_body = ngx.req.get_body_data() or "-" ngx.var.resp_body = resp_body '; access_log /home/shuhao/openresty-test/logs/post.log dm; #return 200; } }}
- nginx 获取 post body值
- nginx 获取post的值
- gin 获取post请求的json body
- golang--gin获取post里body的参数
- 使用router.post()无法获取到req.body
- java通过HttpServletRequest获取post请求中的body内容
- servlet 获取 body Json数据(post 请求)
- AFNetWorking post body内容
- js获取KindEditor body里面的值
- servlet 获取 post body 体 (用流读取为空的问题)
- servlet 获取 post body 体 (用流读取为空的问题)
- 解决spring设置filter过滤器结合rest风格获取post请求body参数输入流问题
- Servlet 获取 post body 体 (用流读取为空的问题)
- 使用nginx获取get/post参数值并返回给客户端
- java POST请求body传参
- FMC http post 添加 body
- nginx设置请求body大小
- Nginx服务器中使用lua获取get或post参数
- fastjson生成和解析json数据,序列化和反序列化数据
- MQTT协议(二):推送篇
- 周志华 《机器学习》之 第十二章(计算学习理论)概念总结
- 二货小易有一个W*H的网格盒子,网格的行编号为0~H-1,网格的列编号为0~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。 对于两个格子坐标(x1,y1),(x2,y2)的
- 为什么你的科目二总是考不过?
- nginx 获取 post body值
- 【poj3714】 Raid
- Codeforces Round #369 (Div. 2) 解题报告(A,B,C)
- Bitmap.Config
- MySQL重置密码
- linux环境变量相关
- 妹子UI之自定义分页控件
- cocos2d-js 重新require JS文件
- Android自定义控件:动画类(五)----属性动画ValueAnimator基本使用