ngx.location.capture是无阻塞的,
为何在频繁请求时会无数据返回? (目前还处于开发环境下)
nginx.conf
==================================
location ~ /pub/(.*)$ {
internal;
nchan_publisher;
nchan_channel_id $1;
nchan_channel_id_split_delimiter ",";
}
==================================
lua logic - lua_code_cache on
==================================
function _M.send_message(self, ctx, id, message, channels)
log:info("send-1")
-- 加载解析器
log:info("send-2")
-- 封包
log:info("send-3")
-- 加密
log:info("send-4")
-- 打包
local package = 来自上述逻辑
local output = wrap(package)
log:info("send-5 " .. "/pub/" .. channels)
ngx.req.set_header("Content-Type", "application/octet-stream")
local res = ngx.location.capture("/pub/" .. channels, {method = ngx.HTTP_POST, body = output})
log:info("send-6")
if res.status >= 200 and res.status < 300 then
return true
else
return false
end
end
==================================
正常情况下会走完6步(send-6),少部分情况下只走到第5步就蒸发了,前5步日志都有,客户端抓包就是收不到HTTP响应,出现这种情况的时候nginx access log都记录不了当前请求,也无error.log产生,实际上已执行到send5,附日志:
自定义 info.log
-----------------------------------------------------------------
2017-01-10 09:54:46 [info] send-1
2017-01-10 09:54:46 [info] send-2
2017-01-10 09:54:46 [info] send-2
2017-01-10 09:54:46 [info] send-3
2017-01-10 09:54:46 [info] send-4
2017-01-10 09:54:46 [info] send-5 /pub/R_1
2017-01-10 09:54:46 [info] send-6
2017-01-10 09:54:46 [info] send-1
2017-01-10 09:54:46 [info] send-2
2017-01-10 09:54:46 [info] send-3
2017-01-10 09:54:46 [info] send-4
2017-01-10 09:54:46 [info] send-5 /pub/R_1
2017-01-10 09:54:54 [info] send-1
2017-01-10 09:54:54 [info] send-2
2017-01-10 09:54:54 [info] send-3
2017-01-10 09:54:54 [info] send-4
2017-01-10 09:54:54 [info] send-5 /pub/R_1
2017-01-10 09:55:02 [info] send-1
2017-01-10 09:55:02 [info] send-2
2017-01-10 09:55:02 [info] send-3
2017-01-10 09:55:02 [info] send-4
2017-01-10 09:55:02 [info] send-5 /pub/R_1
-----------------------------------------------------------------
nginx access.log
----------------------------------------------------------------
192.168.2.101 - - [10/Jan/2017:09:54:45 +0800] "POST /data.J4T HTTP/1.1" 200 41 "-" "-"
192.168.2.101 - - [10/Jan/2017:09:54:45 +0800] "POST /data.J4T HTTP/1.1" 200 41 "-" "-"
192.168.2.101 - - [10/Jan/2017:09:54:45 +0800] "POST /data.J4T HTTP/1.1" 200 41 "-" "-"
192.168.2.101 - - [10/Jan/2017:09:54:45 +0800] "POST /data.J4T HTTP/1.1" 200 41 "-" "-"
192.168.2.101 - - [10/Jan/2017:09:54:45 +0800] "POST /data.J4T HTTP/1.1" 200 41 "-" "-"
192.168.2.101 - - [10/Jan/2017:09:54:45 +0800] "POST /data.J4T HTTP/1.1" 200 41 "-" "-"
192.168.2.101 - - [10/Jan/2017:09:54:46 +0800] "POST /data.J4T HTTP/1.1" 200 41 "-" "-"
192.168.2.101 - - [10/Jan/2017:09:54:46 +0800] "POST /data.J4T HTTP/1.1" 200 41 "-" "-"
192.168.2.101 - - [10/Jan/2017:09:54:46 +0800] "POST /data.J4T HTTP/1.1" 200 41 "-" "-"
192.168.2.101 - - [10/Jan/2017:09:54:46 +0800] "POST /data.J4T HTTP/1.1" 200 41 "-" "-"
中间断了请求日志???
192.168.0.12 - - [10/Jan/2017:09:56:29 +0800] "POST /data.J4T HTTP/1.1" 200 168 "-" "-"
192.168.0.12 - - [10/Jan/2017:09:56:30 +0800] "POST /data.J4T HTTP/1.1" 200 90 "-" "-"
192.168.0.12 - - [10/Jan/2017:09:56:30 +0800] "POST /data.J4T HTTP/1.1" 200 1023 "-" "-"
192.168.0.12 - - [10/Jan/2017:09:56:30 +0800] "POST /data.J4T HTTP/1.1" 200 1278 "-" "-"
192.168.0.12 - - [10/Jan/2017:09:56:30 +0800] "POST /data.J4T HTTP/1.1" 200 66 "-" "-"
----------------------------------------------------------------
info.log只截取了出错的那一部分,实际上后面几个请求都是这种情况,持续了1分多钟的样子。这种情况会持续出现。
看样子ngx.location.capture是执行出错还是阻塞了?