上传文件,因为还有其它 form 参数,所以使用了 reqargs 模块,发现在错误日志里出现了

2017/10/30 22:29:42 [error] 15189#0: *641 lua tcp socket read timed out

导致这个问题原因有很多,可以搜索下 nginx 相关的一些设置,在调整了 nginx 一些相关的 timeout 参数无果后,去翻了一下 reqargs 的代码,原来是在读取上传文件的时候超时了,而 reqargs 是有 timeout 设置的,只是我没有在文档里看到,详细代码如下:

elseif sub(ct, 1, 19) == "multipart/form-data" then
local tmpdr = options.tmp_dir or defaults.tmp_dir
if tmpdr and sub(tmpdr, -1) ~= sep then
tmpdr = tmpdr .. sep
end
local maxfz = options.max_file_size    or defaults.max_file_size
local maxfs = options.max_file_uploads or defaults.max_file_uploads
local chunk = options.chunk_size       or defaults.chunk_size
local form, e = upload:new(chunk, options.max_line_size or defaults.max_line_size)
if not form then return nil, e end
local h, p, f, o, s
local u = 0
form:set_timeout(options.timeout or defaults.timeout)

这个 timeoutm 如果不设置,默认就是 1000,主要是在模块初始化的时候设置

local get, post, files = require "reqargs"({timeout = 3600})

改为 3600 后,问题消失。