38

複数のアップストリーム アプリ サーバーの前でロード バランサーとして nginx を使用しています。リクエストをアプリ サーバー ログと関連付けるために使用するトレース ID を設定したいと考えています。Nginxでそれを行う最良の方法は何ですか?これに適したサードパーティのモジュールはありますか?

それ以外の場合、非常に簡単な方法は、タイムスタンプ (十分に正確でない場合は乱数を追加する可能性があります) に基づいて、リクエストの追加ヘッダーとして設定することですが、ドキュメントに表示される唯一の set_header コマンドは、応答ヘッダー。

4

4 に答える 4

102

nginx 1.11.0 では$request_id、一意の識別子である新しい変数が追加されたため、次のようなことができます。

   location / {
      proxy_pass http://upstream;
      proxy_set_header X-Request-Id $request_id;
   }

http://nginx.org/en/docs/http/ngx_http_core_module.html#var_request_idのリファレンスを参照してください

于 2016-07-19T00:34:32.220 に答える
33

ほとんどの場合、カスタム モジュールは必要ありません。(ほとんどの場合) 一意の http_core_module の埋め込み変数を組み合わせてヘッダーを設定するだけです。例:

  location / {
      proxy_pass http://upstream;
      proxy_set_header X-Request-Id $pid-$msec-$remote_addr-$request_length;
  }

これにより、「31725-1406109429.299-127.0.0.1-1227」のようなリクエスト ID が生成され、トレース ID として機能するには「十分に一意」である必要があります。

于 2014-07-23T12:33:48.853 に答える