7.在代理后面表达 | 7. Express behind proxies

代理后的Express

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

虽然如果未设置应用程序变量trust proxy,应用程序将无法运行,但如果未配置trust proxy,它将错误地将代理的IP地址注册为客户端IP地址。

类型
布尔如果为true,则将客户端的IP地址理解为X-Forwarded- *标头中最左边的条目。如果为false,则应用程序被理解为直接面向Internet,并且客户端的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您可以通过以下任何方式设置IP地址:app.set('trust proxy','loopback')//指定一个子网app.set('trust proxy ','loopback,123.123.123.123')//指定一个子网和一个地址app.set('trust proxy','loopback,linklocal,uniquelocal')//指定多个子网为CSV app.set('trust proxy' ,'loopback','linklocal','uniquelocal')//将多个子网指定为数组如果指定了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})

  • loopback - 127.0.0.1/8, ::1/128

  • linklocal - 169.254.0.0/16fe80::/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')//指定一个子网app.set('trust proxy','loopback,123.123.123.123')//指定一个子网和一个地址app.set('trust代理','loopback,linklocal,uniquelocal')//指定多个子网为CSV app.set('trust proxy','loopback','linklocal','uniquelocal')//指定多个子网作为数组

指定时,将从地址确定过程中排除IP地址或子网,并将离应用程序服务器最近的不可信IP地址确定为客户端的IP地址。

Number Trust the `n`th hop from the front-facing proxy server as the client.

Function Custom trust implementation. Use this only if you know what you are doing.

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软件包实现的。有关更多信息,请参阅其文档。