init_by_lua_block {
local servers = { { "127.0.0.1", 8866 }, { "127.0.0.1", 18867 }, { "127.0.0.1", 8868 }}
local rr = require("my.rr") -- the round-robin module
local rrc = rr:new(servers)
package.loaded.my_servers = servers
package.loaded.my_rr = rrc
}
upstream dyn_ups {
server 0.0.0.1:8866; # just an invalid address as a place holder
balancer_by_lua_block {
local b = require("ngx.balancer")
local rr = package.loaded.my_rr
local srvId = rr:next()
local srv = package.loaded.my_servers[srvId]
ngx.log(ngx.WARN, "srv: " .. table.concat(srv, ":"))
local state_name, state_code = b.get_last_failure()
if state_name then
ngx.log(ngx.ERR, "last failure state " .. state_name .. "code " .. state_code)
end
local ok, err = b.set_current_peer(srv[1], srv[2])
if not ok then
ngx.log(ngx.ERR, "failed to set the current peer: ", err)
return ngx.exit(500)
end
}
keepalive 10;
}
server {
listen 8765;
location /dyn_ups{
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_pass http://dyn_ups;
}
}
server {
listen 8866;
location /dyn_ups{
content_by_lua 'ngx.say(ngx.var.server_port)';
}
}
server {
listen 8867;
location /dyn_ups{
content_by_lua 'ngx.say(ngx.var.server_port)';
}
}
server {
listen 8868;
location /dyn_ups{
content_by_lua 'ngx.say(ngx.var.server_port)';
}
}