关键词搜索

源码搜索 ×
×

Express engine 学习笔记 - 工作在反向代理背后的 Express 设置

发布2021-10-04浏览550次

详情内容

第22行的 express,返回的是一个 express Application 实例。

再看该实例的 set 方法:

app.set(name, value)

将设置名称分配给值。 您可以存储您想要的任何值,但某些名称可用于配置服务器的行为。 这些特殊名称列在应用程序设置表中。

为布尔属性调用 app.set(‘foo’, true) 与调用 app.enable(‘foo’) 相同。 同样,为布尔属性调用 app.set(‘foo’, false) 与调用 app.disable(‘foo’) 相同。

使用 app.get() 检索设置的值。

Express behind proxies

在反向代理后面运行 Express 应用程序时,某些 Express API 可能返回与预期不同的值。 为了对此进行调整,可以使用 trust proxy 应用程序设置来公开 Express API 中反向代理提供的信息。

最常见的问题是公开客户端 IP 地址的 express API 可能会显示反向代理的内部 IP 地址。这并不是我们期望的。

server.set('trust proxy', 'loopback');

    trust proxy 的属性可以设置成以下几种类型:

    设置成 boolean

    如果为 true,则客户端的 IP 地址被理解为 X-Forwarded-For 标头中最左侧的条目。

    如果为 false,则应用程序被理解为直接面向客户端,并且客户端的 IP 地址来自 req.socket.remoteAddress。 这是默认设置。

    设置为 true 时,确保最后一个受信任的反向代理删除/覆盖以下所有 HTTP 标头很重要:X-Forwarded-For、X-Forwarded-Host 和 X-Forwarded-Proto,否则的话,客户可能为这几个字段提供任何价值。

    设置成 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

    一些例子:

    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
    
      2
    • 3
    • 4

    指定时,IP 地址或子网将被排除在地址确定过程之外,并且离应用服务器最近的不受信任的 IP 地址被确定为客户端的 IP 地址。 这通过检查 req.socket.remoteAddress 是否可信来工作。 如果是,则从右到左检查 X-Forwarded-For 中的每个地址,直到第一个不可信地址。

    启用信任代理将产生以下影响:

    • req.hostname 的值来自 X-Forwarded-Host 头中设置的值,可以由客户端或代理设置。

    • X-Forwarded-Proto 可以由反向代理设置来告诉应用程序是 https 还是 http 甚至是无效名称。 该值由 req.protocol 反映。

    • req.ip 和 req.ips 值基于套接字地址和 X-Forwarded-For 标头填充,从第一个不受信任的地址开始。

    更多Jerry的原创文章,尽在:“汪子熙”:

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载