有1个问题,描述不是很清晰,有遇到过这种情况的可以留言。
我也是找不到问题所在。
流量多的时候会出现,频率极少。
当前连接数一直维持在50000左右。
逻辑很简单:
在access阶段处理请求,如果匹配条件成功,ngx.redirect(),然后在log阶段记录日志
如果匹配失败,返回给nginx,正常流程处理
log阶段设置flag,默认是false,在上述access阶段匹配成功之后,设置成true
简化代码如下
--- nginx.conf
location /test {
access_by_lua_block {
local logging = require "logging"
local host = ngx.var.host
if host == "test.com" then
if (matched) then
-- do somethings
logging.flag = true
ngx.redirect("http://openresty.org/1", 301)
else
-- return to nginx
return
end
else
ngx.redirect("http://openresty.org/2", 302)
end
}
log_by_lua_block {
local tostring = tostring
local logging = require "logging"
ngx.log(ngx.NOTICE, "logging flag before write():", tostring(logging.flag))
logging.write()
ngx.log(ngx.NOTICE, "logging flag after write():", tostring(logging.flag))
}
}
--- end
--- logging.lua
local _M = {}
_M.flag = false
function _M.write()
if _M.flag then
_M.flag = false
-- write somethings at here
-- file = io.open()
end
end
return _M
--- end
预期的情形:
(a).host == "test.com" 并且matched成功,log阶段记录2条日志
logging flag before write():true
logging flag before write():false
(b).host == "test.com" 但是matched不成功,log阶段记录2条日志
logging flag before write():false
logging flag before write():false
(c).host != "test.com",,重定向302, log阶段记录2条日志
logging flag before write():false
logging flag before write():false
现在,当连接数一直维持在50000左右的时候,日志一直增长
日志是这样的
请求(b)
logging flag before write():false
logging flag before write():false
请求(b)
logging flag before write():false
logging flag before write():false
...
...
...
...
请求(a)
logging flag before write():true
logging flag before write():false
请求(a)
logging flag before write():true
logging flag before write():false
...
...
...
...
请求(c)
logging flag before write():false
logging flag before write():false
...
...
异常:这里会有一条不符合预期的日志:
请求(c)
logging flag before write():true
logging flag before write():false
这个情况极少极少,不解啊。
PS:
1.不符合预期的日志中部分http code 400
2.是没有理解好ngx.redirect()?
3.header_filter阶段还有代码,删除了某些headers