解决nginx有return时请求体$request_body为空
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了解决nginx有return时请求体$request_body为空,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1267字,纯文字阅读大概需要2分钟。
内容图文
![解决nginx有return时请求体$request_body为空](/upload/InfoBanner/zyjiaocheng/932/c599c48df83349d5ac9eea8b194979bf.jpg)
首先看了一些文章,request_body为空是因为nginx 尚未读取请求体的时候,或者请求体有一部分或者全部缓冲到临时文件的时候,$request_body 和 $echo_request_body 都将是空值。所以需要增加配置
处理办法在nginx.conf配置文件中添加了两个配置项:
fastcgi_buffers 32 8k; #指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答
client_body_buffer_size 1024k; #缓冲区代理缓冲用户端请求的最大字节数
之后发现有return命令时lua代码不会执行,可以实现return 返回,但是请求体request_body还是为空。
所以只能用lua代码来实现记录请求体和返回状态码到客户端
log_format post_data escape=json
'{'
'"time_local":"$time_local",'
'"remote_addr":"$remote_addr",'
'"http_x_forwarded_for": "$http_x_forwarded_for",'
'"args": "$args",'
'"data":"$request_body",'
'"http_user_agent":"$http_user_agent"'
'}';
sendfile on;
keepalive_timeout 65;
init_by_lua 'cjson = require "cjson"';
server {
listen 80;
server_name localhost;
fastcgi_buffers 32 8k;
client_body_buffer_size 5m;
client_max_body_size 10m;
client_body_in_single_buffer on;
lua_need_request_body on;
location /ad/ad_click
{
if ($request_method ~* POST)
{
content_by_lua_block
{
local s = ngx.var.request_body ;
ngx.say(cjson.encode({ret = 0}));
}
access_log /data2/data/ad_log/ad.log post_data ;
}
}
使用postman发出请求,可以看到有返回值
同时日志里面记录请求体
内容总结
以上是互联网集市为您收集整理的解决nginx有return时请求体$request_body为空全部内容,希望文章能够帮你解决解决nginx有return时请求体$request_body为空所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。