我理解ngx.balancer可以在直接写入后端的host和port,直接忽略upstream里配置的server列表;
但是从实现的角度看,原有的upstream,nginx可以很好的对后端异常的host做处理,跳过并且选择下一个server;
但是如果使用balancer_by_lua_block接管这个过程,需要自己保证这个后端地址是OK的。
那么怎么在这里判断set_current_peer之后,这个ip是否异常,并且在下一次request处理的时候屏蔽它?
balancer_by_lua_block {
local balancer = require "ngx.balancer"
local err = balancer.get_last_failure()
if err then
ngx.log(ngx.ERR, '****'..err..'****')
end
local ups = require "ngx.upstream"
local j = require "cjson.safe"
local tmp = ups.get_upstreams()
for _,name in pairs(tmp) do
local servers = ups.get_servers(name)
for _,vv in pairs(servers) do
ngx.log(ngx.ERR, name..','..j.encode(vv))
--if vv.name == '127.0.0.1:84' then
--local ok,err = balancer.set_current_peer(vv.addr)
--if not ok then ngx.log(ngx.ERR, err) end
--end
end
end
}