StrongLoop / IBMによって提供されるこの翻訳.

本書は、英語の資料と比較すると古くなっている可能性があります。最新の更新については、英語版の資料を参照してください。

プロキシーの背後の Express

Express アプリケーションをプロキシーの背後で実行する場合、(app.set() を使用して) アプリケーション変数 trust proxy を次の表にリストされているいずれかの値に設定します。

アプリケーション変数 trust proxy が設定されていない場合でもアプリケーションの実行は失敗しませんが、trust proxy が構成されていない限り、プロキシーの IP アドレスを誤ってクライアント IP アドレスとして登録します。

真偽値

true の場合、クライアントの IP アドレスは、X-Forwarded-* ヘッダーの左端の項目として理解されます。

false の場合、アプリケーションはインターネットに直接接続されているものとして理解され、クライアントの IP アドレスは req.connection.remoteAddress から導き出されます。これはデフォルトの設定値です。

IP アドレス

信頼される IP アドレス、サブネット、または IP アドレスとサブネットの配列。次のリストに、事前構成されたサブネット名を示します。

  • loopback - 127.0.0.1/8::1/128
  • linklocal - 169.254.0.0/16fe80::/10
  • uniquelocal - 10.0.0.0/8172.16.0.0/12192.168.0.0/16fc00::/7

以下のどの方法でも IP アドレスを設定できます。

app.set('trust proxy', 'loopback') // specify a single subnet
app.set('trust proxy', 'loopback, 123.123.123.123') // specify a subnet and an address
app.set('trust proxy', 'loopback, linklocal, uniquelocal') // specify multiple subnets as CSV
app.set('trust proxy', ['loopback', 'linklocal', 'uniquelocal']) // specify multiple subnets as an array

IP アドレスまたはサブネットは、指定されると、アドレス決定プロセスから除外されます。アプリケーション・サーバーに最も近い信頼できない IP アドレスがクライアントの IP アドレスに決定されます。

数字

プロキシー・サーバーから n 番目のホップをクライアントとして信頼します。

関数

カスタムの信頼実装。実行内容を理解している場合にのみ、これを使用してください。

app.set('trust proxy', (ip) => {
  if (ip === '127.0.0.1' || ip === '123.123.123.123') return true // trusted IPs
  else return false
})

trust proxyを有効にすると、次の3つの重要な変更が起こります。

trust proxy 設定は、proxy-addr パッケージを使用して実装されます。詳細については、資料を参照してください。