当在反向代理后运行 Express 应用时,一些 Express API 可能会返回与预期不同的值。为了解决这个问题,可以使用 trust proxy 应用设置来在 Express API 中暴露由反向代理提供的信息。最常见的问题是,暴露客户端 IP 地址的 Express API 可能会显示反向代理的内部 IP 地址。
app.set('trust proxy','loopback')// specify a single subnetapp.set('trust proxy','loopback, 123.123.123.123')// specify a subnet and an addressapp.set('trust proxy','loopback, linklocal, uniquelocal')// specify multiple subnets as CSVapp.set('trust proxy',['loopback','linklocal','uniquelocal'])// specify multiple subnets as an array
指定时,IP 地址或子网将从地址确定过程中排除,距离应用服务器最近的不可信 IP 地址被确定为客户端的 IP 地址。其工作原理是检查 req.socket.remoteAddress 是否受信任。如果受信任,则从右到左检查 X-Forwarded-For 中的每个地址,直到找到第一个不受信任的地址。