Подтвердить что ты не робот

Как записывать все заголовки в nginx?

В соответствии с заголовком этого вопроса, как мне вести регистрацию всех браузеров клиентских браузеров, отправленных в Nginx? Я также хочу записать заголовок ответа. Обратите внимание, что я использую nginx в качестве обратного прокси.

После прохождения документации я понимаю, что могу зарегистрировать определенный заголовок, но я хочу записать все заголовки.

Я согласен с хакерским решением!

4b9b3361

Ответ 1

После долгих исследований я могу заключить, что это невозможно из коробки.

Обновление - вы можете использовать openresty, который поставляется с Lua. Используя Lua, можно сделать довольно классные вещи, включая ведение журнала всех заголовков, чтобы сказать Redis или какой-либо другой сервер

Ответ 2

Как сказал @gauravphoenix, вам нужны опнрести, которые идут с Lua. Смотрите https://github.com/openresty/lua-nginx-module/ для его установки. Как только он запустится, добавьте nginx

header_filter_by_lua_block {
  local h = ngx.req.get_headers()
  for k, v in pairs(h) do
    ngx.log(ngx.ERR, "Got header "..k..": "..v..";")
  end
}

Проверьте ваш журнал ошибок.

Ответ 3

Основываясь на ответе @user1778602, set_by_lua может использоваться для установки всех заголовков в переменную, которая будет использоваться позже в log_format. Следующее устанавливает все заголовки в переменной "$ request_headers"

set_by_lua $request_headers '
  local h = ngx.req.get_headers()
  local request_headers_all = ""
  for k, v in pairs(h) do
    request_headers_all = request_headers_all .. ""..k..": "..v..";"
  end
  return request_headers_all
';