在代理後面運行Express應用程序時,將(經過使用app.set()
)應用程序變量trust proxy
設置爲下面列出的值之一。npm
雖然若是未設置應用程序變量trust proxy
,應用程序不會運行失敗,但它將錯誤地將代理的IP地址註冊爲客戶端IP地址,除非配置了trust proxy
。
Boolean
true
,則客戶端的IP地址被理解爲X-Forwarded-*
header中最左側的條目。false
,則應用程序理解爲直接面向互聯網,客戶端的IP地址來自req.connection.remoteAddress
,這是默認設置。要信任的IP地址、子網或IP地址和子網的數組,如下列表顯示了預配置的子網名稱:segmentfault
127.0.0.1/8
、::1/128
169.254.0.0/16
、fe80::/10
10.0.0.0/8
、172.16.0.0/12
、192.168.0.0/16
、fc00::/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
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 })
啓用trust proxy
會產生如下影響:app
req.hostname
的值派生自X-Forwarded-Host
header中設置的值,該值可由客戶端或代理設置。X-Forwarded-Proto
來告訴應用程序它是https
仍是http
甚至是無效的名稱,該值由req.protocol
反映。req.ip
和req.ips
值使用X-Forwarded-For
的地址列表填充。trust proxy
設置使用proxy-addr包實現,有關更多信息,請參閱其文檔。函數