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