StrongLoop 提供的 Express 和 Node.js 訓練課程

這個翻譯StrongLoop / IBM提供.

相對於英文版說明文件,本文件可能已不合時宜。如需最新的更新,請參閱英文版說明文件

位於 Proxy 背後的 Express

當 Express 應用程式是在 Proxy 背後執行時,請使用 app.set(),將 trust proxy 應用程式變數設為下表列出的其中一值。

雖然未設定 trust proxy 應用程式變數時,應用程式並不會無法執行,但除非配置 trust proxy,否則,它會將 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 位址。

號碼

信任來自正面 Proxy 伺服器的第 n 個躍點就是用戶端。

函數

自訂信任實作。只有在您清楚自己要做什麼時,才能使用此項。

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

如果設定 false trust proxy 以外的值,會造成三項重要的變更:

會使用 proxy-addr 套件來實作 trust proxy 設定。如需相關資訊,請參閱其說明文件。