TrustProxy 为 true 时,Fiber 盲信 X-Forwarded-For 并取最左值作为 c.IP() 结果,但该头可被伪造,易导致限流/黑名单失效;仅当反向代理(如 Nginx、Cloudflare)已正确配置可信源并透传真实 IP 时才应启用。

TrustProxy 为 true 时,X-Forwarded-For 不再可信
Fiber 默认 TrustProxy: false,此时 c.IP() 返回的是直连客户端真实 IP;一旦设为 true,Fiber 就会信任 X-Forwarded-For 头,并取其最左值作为 c.IP() 结果——但这个头可被任意伪造,前端没做透传过滤时,攻击者发 X-Forwarded-For: 1.2.3.4, 5.6.7.8 就能绕过所有基于 IP 的限流或黑名单。
常见错误现象:c.IP() 在 Nginx 后面突然变成内网地址、限流规则失效、日志里出现大量重复“同一 IP”高频请求(实为伪造)。
- 只在明确有可信反向代理(如 Nginx、Cloudflare、API 网关)且已配置
set_real_ip_from或等效机制时,才启用TrustProxy: true - 若用 Nginx,必须配
real_ip_header X-Forwarded-For;+set_real_ip_from指定可信上游网段,否则 Fiber 无法安全剥离伪造层 - 禁用
TrustProxy后仍需获取真实 IP?改用c.Get("X-Real-IP")或自定义解析逻辑,不依赖c.IP()
TrustProxy 配置必须与反向代理行为严格对齐
开 TrustProxy: true 却没配好 Nginx 的 real_ip 设置,等于主动打开 IP 伪造入口。Fiber 不会校验 X-Forwarded-For 格式或长度,它只是无条件取第一个非空值。
使用场景:K8s Ingress、AWS ALB、自建 Nginx 集群 —— 这些组件默认透传 X-Forwarded-For,但只有部分会自动去重/截断。比如 ALB 默认追加,Nginx 默认覆盖,行为不一致就会导致 c.IP() 取到链路中间节点而非终端用户。
立即学习“go语言免费学习笔记(深入)”;
- Nginx 示例(必须):
set_real_ip_from 10.0.0.0/8;<br>set_real_ip_from 172.16.0.0/12;<br>set_real_ip_from 192.168.0.0/16;<br>real_ip_header X-Forwarded-For;<br>real_ip_recursive on;
- Cloudflare 场景:应设
TrustProxy: true,但只信任CF-Connecting-IP头,此时建议禁用X-Forwarded-For解析,直接c.Get("CF-Connecting-IP") - 本地开发或单机部署?保持
TrustProxy: false,避免测试环境误用线上配置
别在 handler 里动态改 TrustProxy
TrustProxy 是应用级配置,初始化后不可变。Fiber 的 c.IP() 行为由启动时 fiber.Config 决定,运行时调 app.Config().TrustProxy = true 不生效,也不会报错——你改了,但所有请求仍按旧逻辑走。
容易踩的坑:有人想“根据请求头动态切换”,比如只对特定域名开启信任,结果写了个中间件反复赋值 app.Config().TrustProxy,发现完全没用。
- 路由级差异需求?用不同
*fiber.App实例隔离,而不是复用一个 app 改配置 - 需要混合信任策略?放弃
c.IP(),统一用c.Get("X-Real-IP")或c.Get("X-Forwarded-For")+ 自定义解析函数(注意边界检查,防空、防超长、防恶意分隔符) - 上线前检查:
go run main.go启动后,用 curl -H "X-Forwarded-For: 1.2.3.4" http://localhost:3000/test,看日志输出的 IP 是否符合预期
高并发下 TrustProxy 开启会轻微增加 CPU 开销
启用 TrustProxy: true 后,每次请求 c.IP() 都要 split + trim X-Forwarded-For 字符串,虽然单次开销微乎其微,但在 QPS > 5k 的网关类服务中,累积可观测到 1–3% 的 CPU 使用率上升(实测于 2026 年 10 月压测数据)。
这不是 bug,是必然代价:你要信任外部头,就得付出解析成本。而 TrustProxy: false 下 c.IP() 直接取 net.Conn.RemoteAddr(),零字符串操作。
- 若业务对延迟极度敏感(TTFB
- 需要 IP 但又不愿承担解析开销?在反向代理层统一注入
X-Real-IP,Fiber 中只读该头,跳过c.IP()调用 - 别为了“看起来更规范”而开启 TrustProxy——没有可信代理链时,它只带来风险和开销
真正难的不是配对 TrustProxy 和 Nginx,而是确认整个请求链路上每个组件是否都按预期传递、截断、验证了 IP 头。少一环,c.IP() 就不可信;多一环伪造,限流和风控就形同虚设。



















