在代理后面运行Express应用程序时,(通过使用app.set())将应用程序变量trust proxy设置为下表中列出的值之一。
尽管如果trust proxy未设置应用程序变量,应用程序将不会运行失败,但是除非trust proxy进行了配置,否则它将错误地将代理的IP地址注册为客户端IP地址。
| 类型 | 值 |
|---|---|
| 布尔型 | 如果为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::/10- uniquelocal - , 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
指定后,IP地址或子网将从地址确定过程中排除,并且最接近应用程序服务器的不受信任IP地址被确定为客户端的IP地址。 || 数 | 信任`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标头中设置的值派生的,该标头可以由客户端或代理设置。 X-Forwarded-Proto可以通过反向代理设置,告诉应用程序是否是https或者http甚至是无效的名称。该值由req.protocol反映。- 该req.ip和req.ips值填入地址从列表中
X-Forwarded-For。
该trust proxy设置是使用proxy-addr包实现的。有关更多信息,请参见其文档。
