web-dev-qa-db-ja.com

nginxのすべてのヘッダーを記録する方法は?

この質問のタイトルごとに、クライアントブラウザーがNginxで送信したすべてのヘッダーをログに記録するにはどうすればよいですか?応答ヘッダーもログに記録します。私はnginxをリバースプロキシとして使用していることに注意してください。

ドキュメントを確認した後、特定のヘッダーをログに記録できることを理解していますが、すべてのヘッダーをログに記録したいと考えています。

ハッキーソリューションを受け入れます!

30
gauravphoenix

多くの研究の結果、私はそれが箱から出して可能ではないと結論付けることができます。

更新-Luaに付属のopenrestyを使用できます。 Luaを使用すると、Redisや他のサーバーなどのすべてのヘッダーを記録するなど、かなりクールなことができます。

15
gauravphoenix

@gauravphoenixが言ったように、Luaに付属するopnrestyが必要です。インストールについては 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
}

エラーログを調べます。

12
user1778602

@ 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
';
1
Amadu Bah