Вот как вы можете это сделать с помощью nginx & lua:
lua_shared_dict live_hosts 1M;
rewrite_by_lua_block {
local dict = ngx.shared.live_hosts;
if (not ngx.var.http_counted) then
ngx.req.set_header("counted", "true");
dict:incr(ngx.var.host, 1, 0);
end
}
log_by_lua_block {
local dict = ngx.shared.live_hosts;
dict:incr(ngx.var.host, -1);
}
Затем вы можете получить доступ к ngx.shared.live_hosts:get('foo.com')
Примечание: добавленный заголовок counted
необходим для обработки внутреннего перенаправления nginx: в этом случае rewrite_by_lua вызывается дважды, тогда как log_by_lua вызывается только один раз.ngx.ctx
нельзя использовать (очищается при внутреннем перенаправлении)