跳到主要内容

Nginx 反向代理 Node 时,最先检查这三个 header

· 阅读需 2 分钟
一介布衣
全栈开发者

Nginx 反向代理 Node 服务时,很多问题表面上都像“接口有 bug”。
可 2017 年我自己在处理代理和部署问题时,越来越多时候发现,根因其实不在业务代码,而在请求经过 Nginx 之后,有些关键信息没有被完整传下去。

最值得先看的,通常就是几个最基础的 header。

我最先检查的三个

1. Host

这个头关系到 Node 服务怎么看待当前请求的域名。
如果它被改掉或者没按预期透传,后面很多依赖域名判断的逻辑都会跟着偏掉。

2. X-Forwarded-For

日志里看到的到底是真实客户端 IP,还是代理层地址,常常就取决于这里。
如果没有透传,后面做访问分析、限流和排查异常来源都会很吃力。

3. X-Forwarded-Proto

尤其涉及 HTTP 跳 HTTPS、生成绝对地址、判断安全链接时,这个头特别关键。
很多看似莫名其妙的跳转循环,本质上都是应用层没拿到正确协议上下文。

为什么我先看 header 而不是先翻业务代码

因为这三件事一旦不对,业务层拿到的请求上下文一开始就是歪的。
你后面看鉴权、看跳转、看链接拼接,都会被错误上下文带着跑偏。

排障时越早确认代理层有没有把请求语义传完整,越不容易在应用层里白绕圈子。

小结

Nginx 反向代理 Node 时,真正容易被低估的不是转发本身,而是请求上下文有没有被代理层保留下来。
2017 年之后我处理这类问题时,第一反应越来越简单:先看 HostX-Forwarded-ForX-Forwarded-Proto。这三样站稳了,后面的判断才有基础。