在代办背面运转Express
在代办背面运转Express应用程序时,将(经由过程运用app.set()
)应用程序变量trust proxy
设置为下面列出的值之一。
虽然假如未设置应用程序变量
trust proxy
,应用程序不会运转失利,但它将毛病地将代办的IP地点注册为客户端IP地点,除非设置了
trust proxy
。
范例:Boolean
- 假如为
true
,则客户端的IP地点被理解为X-Forwarded-*
header中最左边的条目。 - 假如为
false
,则应用程序理解为直接面向互联网,客户端的IP地点来自req.connection.remoteAddress
,这是默认设置。
范例:IP地点
要信托的IP地点、子网或IP地点和子网的数组,以下列表显现了预设置的子网称号:
- loopback —
127.0.0.1/8
、::1/128
- linklocal —
169.254.0.0/16
、fe80::/10
- uniquelocal —
10.0.0.0/8
、172.16.0.0/12
、192.168.0.0/16
、fc00::/7
- loopback —
你能够经由过程以下任何体式格局设置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地点。
范例:Number
- 信托来自前置代办服务器的第
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
会发生以下影响:
-
req.hostname
的值派生自X-Forwarded-Host
header中设置的值,该值可由客户端或代办设置。 - 能够经由过程反向代办设置
X-Forwarded-Proto
来通知应用程序它是https
照样http
以至是无效的称号,该值由req.protocol
反应。 -
req.ip
和req.ips
值运用X-Forwarded-For
的地点列表添补。
trust proxy
设置运用proxy-addr包完成,有关更多信息,请参阅其文档。