在代理背后表达

在代理背后表达

在反向代理后面运行快速应用时,某些快速 API 可能会返回与预期不同的值。为了对此进行调整,可以使用应用程序设置在 Express API 中公开反向代理提供的信息。最常见的问题是,公开客户端 IP 地址的显式 API 可能会显示反向代理的内部 IP 地址。trust proxy

配置设置时,了解反向代理的确切设置非常重要。由于此设置将信任请求中提供的值,因此 Express 中的设置组合必须与反向代理的操作方式相匹配。trust proxy

应用程序设置可以设置为下表中列出的值之一。trust proxy

类型 价值
布尔

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

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

设置为 时,请务必确保最后一个受信任的反向代理正在删除/覆盖以下所有 HTTP 标头:、、,否则客户端可能会提供任何值。trueX-Forwarded-ForX-Forwarded-HostX-Forwarded-Proto

IP 地址

要信任为反向代理的 IP 地址、子网或 IP 地址和子网数组。以下列表显示了预配置的子网名称:

  • 回送-127.0.0.1/8::1/128
  • 链接本地 - ,169.254.0.0/16fe80::/10
  • 唯一本地 - , , ,10.0.0.0/8172.16.0.0/12192.168.0.0/16fc00::/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

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

使用与 Express 应用程序最多相距跃点数的地址。 是第一个跃点,其余的在标题中从右到左查找。值 of 表示第一个不受信任的地址是 ,即没有反向代理。nreq.socket.remoteAddressX-Forwarded-For0req.socket.remoteAddress

使用此设置时,请务必确保 Express 应用程序没有多个不同长度的路径,以便客户端可以小于配置的跃点数,否则客户端可能会提供任何值。

功能

自定义信任实现。

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可以通过反向代理设置,以告诉应用程序它是无效名称还是无效名称。此值由 req.protocol 反映。httpshttp

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

该设置是使用代理地址包实现的。有关详细信息,请参阅其文档。trust proxy

posted @   code星  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示