Express behind proxies

在代理后面运行Express应用程序时,(通过使用app.set() )将应用程序变量trust proxy设置为下表中列出的值之一.

尽管如果未设置应用程序变量trust proxy ,应用将不会运行失败,但是除非配置了trust proxy ,否则它将错误地将代理的IP地址注册为客户端IP地址.

TypeValue
Boolean

如果为true ,则将客户端的IP地址理解为X-Forwarded-*标头中的最左侧条目.

如果为false ,则该应用程序应被视为直接面向Internet,并且客户端的IP地址是从req.connection.remoteAddress派生的. 这是默认设置.

IP地址

IP地址,子网或要信任的IP地址和子网的阵列. 以下列表显示了预先配置的子网名称:

  • 回送127.0.0.1/8::1/128
  • linklocal- 169.254.0.0/16 fe80::/10fe80::/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地址.

Number

信任来自前端代理服务器的第n个跃点作为客户端.

Function

自定义信任实施. 仅当您知道自己在做什么时才使用此功能.

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将产生以下影响:

trust proxy设置是使用proxy-addr包实现的. 有关更多信息,请参见其文档.

by  ICOPY.SITE