概述
需求与问题
工作中经常接到在nginx日志中打印出post请求的body数据的需求,也就是打印出$request_body。而直接在log_format中添加$request_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, uwsgi_pass或者scgi_pass指令时,request body才会被读取到内存缓冲区中,$request_body变量才有值。
进一步查找网上文章,request_body在未运行上面所说的proxy_pass等指令配置时,默认会被赋值为空
1
2
3(gdb) p r->request_body
$1 = (ngx_http_request_body_t *) 0x0
(gdb)
nginx中读取POST数据必须要调用ngx_http_read_client_request_body()函数,而默认情况下,这个函数是不会被调用的。
遇到返回request_body为空的,如果配置没有问题,一般是没有用到上面所列出的proxy_pass等代理配置的,直接return了状态码或者静态资源。例如前端
最后
以上就是懦弱导师为你收集整理的nginx 获取body参数_nginx获取request_body的全部内容,希望文章能够帮你解决nginx 获取body参数_nginx获取request_body所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复