IP и порт восходящего потока доступны в переменной ngx.var.upstream_addr
, header_filter_by_lua
и log_by_lua
. Но, во-первых, ведение журнала заставит запросы ждать завершения ваших записей, а во-вторых, сетевые сокеты недоступны, поэтому вам нужно поставить в очередь запись в журнал и запустить ее по таймеру.
Что-то вроде что (не проверено, но должно помочь вам понять):
app. lua - отдельный файл, он нам нужен, чтобы глобальное состояние было кэшировано:
M = {}
local queue = {}
function M.init()
ngx.timer.every(1.0, function(premature)
if premature then return end
-- push queue to redis and clear it
end)
end
function M.log()
queue[#queue+1] = ngx.var.upstream_addr
end
return M
nginx:
init_worker_by_lua_block { require('app.lua').init() }
log_by_lua_block { -- or header_filter_by_lua_block
require('app.lua').log()
}