解决nginx有return时请求体$request_body为空

首先看了一些文章,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发出请求,可以看到有返回值
在这里插入图片描述
同时日志里面记录请求体
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值