关于一个nginx_lua在解析request请求数据异常的问题

卖女孩的火柴 发布于 2016/10/26 16:00
阅读 336
收藏 0

背景:客户端返回响应信息,以HTTP POST的方式传给后台,后台进行记录响应日志作为他用,同时客户端不关心http请求结果,后端使用nginx作为HTTP服务器,结合lua获取post请求的requestBody数据(body中是一个json串),并将数据记录在nginx的access日志里,目前最高峰并发大约5W,三台ng,其实对于ng来说几乎无压力。

首先上nginx部分配置代码,请过目:

nginx access日志格式配置:
log_format lua_log '$cur_time - $reqBody';

nginx server及location配置:

set $reqBody "";
set $cur_time "";

location log/print {
    lua_need_request_body on;
    default_type 'text/json';
    content_by_lua ' local method = ngx.req.get_method()
                            ngx.var.cur_time =os.date("%Y-%m-%d %H:%M:%S")
                            if method == "POST" then
                                    local requestBody = ngx.unescape_uri(ngx.var.request_body)
                                    requestBody = string.gsub(reqBody2, " ", "")
                                    requestBody = string.gsub(reqBody2,"\n" ,"")
                                    ngx.var.reqBody = requestBody
                            else
                                    ngx.var.reqBody = "{\"common\":{},\"params\":{}}"
                            end
                            ngx.print("0")';
      access_log logs/click.log lua_log;
}

以上就是完整的配置,其他均采用nginx的默认配置 ,在接收post请求时打印 时间和requestbody部分内容,其他请求方式时打印时间和固定的字符串。

问题:
现在大多数请求可以正常获取并记录数据到access日志里,:
2016-10-26 00:00:01 - {"common":{"unix":"1477411201306.446","uid":651375093,"mcc":"460","app_version":"10060100","width":640,"net":"wifi","device":"iPhone6,2"},"params":{"stat_value":1,"net":"wifi","tabType":0,"city_id":1848,"ad_index":304,"price":"0","stat_type":1}}

但是,在日志里存在一部分脏数据,只有一个横线"-",
这个横线应该是我在log_format里设置的间隔符号,然后cur_time和reqBody都没有值,就好像是并没有进入到我的lua代码块,在测试环境也不能复现,百思不得其解,在次求大神指教!!!!

加载中
返回顶部
顶部