在反向代理穿透中 transport.proxyProtocolVersion 的作用与用途

社区话题 Linux/macOS 与自动化运维 FRP + Nginx + Docker 真实客户端 IP 透传配置与抓包排查完整总结 在反向代理穿透中 transport.proxyProtocolVersion 的作用与用途

#792

追光
管理员

1. transport.proxyProtocolVersion 的作用

  • 用于 TCP 代理场景,在连接头中加入 Proxy Protocol v1/v2,传递客户端 IP。

  • HTTP/HTTPS 代理不需要,因为已经有 X-Forwarded-ForX-Real-IP

场景

是否开启 v2

IP 获取方式

HTTP

X-Forwarded-For

HTTPS

X-Forwarded-For

TCP + Nginx

Proxy Protocol

TCP + SSH

无需(直连)

TCP + AI 模型

无需(直连)


2. 什么时候用 v2?

  • 仅在 TCP 穿透 → 后端有 Nginx 或其他支持 Proxy Protocol 的程序时使用。

  • 示例:

listen 80 proxy_protocol;
real_ip_header proxy_protocol;
set_real_ip_from <FRP客户端IP>;
  • 如果后端没有 Nginx(如 SSH、大模型端口),不能开启 v2,否则连接报错(因为目标程序无法解析 Proxy Protocol 头)。


3. HTTP 穿透(你的情况)

  • 默认 HTTP 类型的 FRP 已透传真实 IP。

  • 只需 Nginx 配置:

set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
real_ip_recursive on;

4. 为什么加 v2 出错?

  • 因为目标程序(SSH 或 AI 模型)期望 纯 TCP 流,收到 Proxy Protocol 头会解析失败,直接断开。


一句话记忆

  • HTTP 场景:不用 v2,靠 X-Forwarded-For

  • TCP 场景:只有在后端支持 Proxy Protocol 时才加 v2,否则别加。