在代理后面运行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包实现,有关更多信息,请参阅其文档。函数