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