nginx:すべてのヘッダーで完全な要求/応答を記録しますか?


44

時々ハングするアプリケーションサーバーがあります。クライアントからの不適切なリクエストによるものと思われます。

nginxは完全な要求/応答(フィドラーキャプチャなど)をファイルに記録できるので、ハングする前に送信された要求を確認できますか?

(おそらく、pcapとそのアプローチを避け、すべてをnginxで行う必要があります)

nginxがこのための適切なツールではない場合、(ネットワークアナライザー以外の)何がありますか?


1
リバースプロキシモードのmitmproxyは、探していることを実行する必要があります。
ビベックトーマス

@VivekThomasこれはnginxの質問です...すでにnginxを使用しており、変更する予定はありません。
サムスミス14

3
@samsmith古い質問ですが、おそらくこれは他の誰かに役立つでしょう:nginxをあきらめる必要はありません。状況に応じて、nginxを一時的に別のポートに再ルーティングするだけで、mitmproxyがトラフィックをインターセプトしてデバッグをサポートできるようにすることができます。その後、完了したら、nginxを元のポートに再ルーティングし、mitmproxyをシャットダウンするだけです。
ルンドバーグあたり

1
modsecurityモジュールを使用すると、完全なリクエスト/レスポンスを記録できます。nginx.com
Willem

回答:


44

訪問者から送信されたリクエスト本文を取得するには、ログ形式にclient_body_in_file_only on;var $request_body_fileを追加して、ログに書き込まれる「一時」ファイルを使用してログに記録します。「一時」ファイルは、デフォルトでclient_tempディレクトリに配置されます。

リクエストヘッダー$http_<header>もログに記録し、ヘッダーを送信できます$sent_http_<header>

リクエストの本文とヘッダーがある場合、それを再生して、訪問者が持っていた応答を取得できるはずです。

また、gorのようなものを非常に考慮する必要があります。そのため、nginxに本番環境でIOの問題を引き起こすことなくこれらの一時ファイルを書き込むことができる他の環境でトラフィックを再生することができます(nginxはon値でそれらをパージしませんこの場合)。


1
@jwadsa​​ck答えを注意深く読んでください。
ザビエルルーカス

4
@XavierLucas 2つの異なるアプローチを提供していると思いました。あなたが両方 client_body_in_file_onlyを言っていて$http_<header>必要だとは気がつきませんでした。今わかった。
jwadsa​​ck

5
もっと正確なコードを教えてください。
ベルカン

3
事前にすべてのヘッダ名を知っていれば確かに、HTTP <ヘッダ> $にのみ有用です
エド・ランドール

2
誰かがnginx設定の実際の断片を共有できますか?
ノワカー

17

mitmproxyは、あなたが求めていることを行うための適切なツールのようです。

mitmproxyは、コンソールインターフェイスを備えた、HTTP用の対話型SSL対応中間者プロキシです。

mitmdumpは、mitmproxyのコマンドラインバージョンです。HTTP用のtcpdumpを考えてください。

特徴

  • HTTP要求と応答をインターセプトし、それらを即座に変更します。
  • 後で再生および分析するために、完全なHTTP会話を保存します。
  • HTTP会話のクライアント側を再生します。以前に記録されたサーバーのHTTP応答を再生します。
  • 指定されたサーバーにトラフィックを転送するリバースプロキシモード。
  • OSXおよびLinuxの透過プロキシモード。
  • Pythonを使用して、HTTPトラフィックにスクリプト化された変更を加えます。
  • 傍受用のSSL証明書は、その場で生成されます。

リバースプロキシモードでは、Fiddlerと同じようにリクエストとレスポンスをキャプチャできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.