背景:
netstub项目中,后端的lua脚本中使用ngx.req.get_body_data获取请求body中的数据,使用过程中发现,当请求的body数据较大时,nginx会报错,发现ngx.req.get_body_data() 返回的数据是nil。
原因:
当请求体大于client_body_buffer_size的时候,nginx会将数据保存到一个临时文件里。
解决方法:
① 配置client_body_buffer_size参数,将其改大,如100k
② 当get_body_data返回为nil时, 尝试从file中读取
新建utils.lua文件
utils = {}
local function read_from_file(file_name)
local f = assert(io.open(file_name, "r"))
local string = f:read("*all")
f:close()
return string
end
function utils.get_body_data()
local body_raw = ngx.req.get_body_data()
if not body_raw then
local body_file = ngx.req.get_body_file()
if body_file then
body_raw = read_from_file(body_file)
end
end
return body_raw
end
return utils
lua脚本中, 使用utils.get_body_data() 替换原生ngx.req.get_body_data()即可读取到大body的数据.