web-dev-qa-db-ja.com

nginx構成のproxy_set_headerのさまざまなフィールド

私はnginx設定に非常に慣れていません。私はそれを使用して、仮想ホストを設定し、同じサーバーの異なるポートで異なるNode JSアプリを実行できるようにしますが、それらを異なるサブドメインで提供します。検索した後、 stackoverflowは、私がやりたいことに対してうまく機能します。とりわけ、コードには次のロケーションブロックが含まれます

location / {                                                              │
    proxy_set_header X-Real-IP $remote_addr;                              │
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;          │
    proxy_set_header Host $http_Host;                                     │
    proxy_set_header X-NginX-Proxy true;                                  │
                                                                          │
    proxy_pass http://otherapp/;                                          │
    proxy_redirect off;                                                   │
}

今、私はスクリプトが何をするかを理解したかったです。私はnginxのドキュメントとさまざまな人々が投稿したメモを見て、いくつかのことを理解しました。上記のコードのproxy_set_header以外のproxy_pass行をすべて削除しても、必要な機能はおそらく機能するようです。上記のコードのさまざまなフィールドが何をしているのか知りたいです。たぶん、今のところ気づいていないことにも役立つでしょう。 proxy_set_headerモジュールのすべてのフィールドをリストして説明する場所はありますか?

ありがとうございました。

10
user191017

本質的には、プロキシが実行しているサーバーに情報を提供することです。順番に:

  1. X-Real-IP-nginxサービスはTCP接続。これは通常、特にログではかなり価値がありません。バックエンドサーバーは、通常のクライアントIPの代わりにこのヘッダーを使用して、ロギングやクライアントのIPが必要なその他の用途に使用できます。
  2. X-Forwarded-For-これはX-Real-IPに似た標準的なヘッダーですが、接続が通過したプロキシのチェーン全体に追加の接続ソースエントリを提供します。複数のエントリが存在する可能性があるため、バックエンドサーバーから解析して操作するのが少し面倒になる可能性があります。
  3. Host-これは、アプリケーションで最も問題になる可能性が高いものです。通常、nginxがバックエンドサーバーに対して行う要求には、Hostヘッダーに、構成したアドレス(この場合はhttp://otherapp/)が含まれます。これは、名前ベースの仮想ホスティングを行うもの、または受信したHostヘッダーに基づいてリンクを生成するものにプロキシする場合は、おそらく望ましくありません。この構成は、クライアントがnginxを送信したHostヘッダーがバックエンドに送信されるようにしています(ApacheのProxyPreserveHostと同等)。
  4. X-NginX-Proxy-これは、プロキシが使用されていることを示すマーカーとして機能しているだけです。ほとんどの場合、おそらく役に立たないでしょう。
12
Shane Madden