在代理后面运行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/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’) // 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

    1. 指定后,IP地址或子网将从地址确定过程中排除,并且最接近应用程序服务器的不受信任IP地址被确定为客户端的IP地址。 |
    2. | | 信任`n`来自前端代理服务器的跃点作为客户端。 |
    3. | 功能 | 自定义信任实施。仅当您知道自己在做什么时才使用此功能。

    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.ipreq.ips值填入地址从列表中X-Forwarded-For

    trust proxy设置是使用proxy-addr包实现的。有关更多信息,请参见其文档。