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

背景:客户端返回响应信息,以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代码块,在测试环境也不能复现,百思不得其解,再次求大神指教!!!!

1个回答

shabenben
shabenben 谢谢你的回复,但是这个配置并不大适合我的问题~
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐