send proxy2

send-proxysend-proxy-v2 都是 PROXY Protocol,用于代理在 TCP 转发时把客户端连接信息(主要是 client IP/port)传给后端。区别主要在协议格式、扩展能力和适用场景


1. PROXY Protocol v1 (send-proxy)

格式:

PROXY TCP4 <src_ip> <dst_ip> <src_port> <dst_port>\r\n

示例:

PROXY TCP4 192.168.1.100 10.0.0.20 54321 443\r\n

特点:

项目v1
格式 纯文本 ASCII
解析 简单
调试 方便(tcpdump 可直接看到)
IPv4 支持
IPv6 支持(TCP6)
TLV 扩展 不支持
长度 较长

2. PROXY Protocol v2 (send-proxy-v2)

格式:

+----------------+
| Signature      |
+----------------+
| Version/Command|
+----------------+
| Family/Protocol|
+----------------+
| Length         |
+----------------+
| Address        |
+----------------+
| TLV            |
+----------------+

固定签名:

0d0a0d0a000d0a515549540a

特点:

项目v2
格式 二进制
解析 更快
长度 更紧凑
IPv4 支持
IPv6 支持
TLV 扩展 支持
SSL 信息 支持
ALPN 支持
SNI/Authority 支持

3. TLS 场景区别

两者都可以用于 TLS passthrough。

正确顺序:

TCP connect
      |
      v
PROXY header
      |
      v
TLS ClientHello
      |
      v
TLS handshake

例如:

v1:

PROXY TCP4 1.2.3.4 10.0.0.1 50000 443\r\n
<ClientHello>

v2:

(binary PROXY v2 header)
<ClientHello>

TLS 本身不知道 v1/v2 的区别。

关键是:

后端必须先解析 PROXY,再启动 TLS。


4. 后端支持要求

v1:

后端需要支持:

PROXY TCP4 ...

例如:

read line until \r\n
parse client ip
start TLS

v2:

后端需要支持:

0d0a0d0a000d0a515549540a

然后解析:

address block
TLV
start TLS

5. v2 的优势:TLV

例如 v2 可以携带:

PP2_TYPE_SSL
PP2_TYPE_ALPN
PP2_TYPE_AUTHORITY
PP2_TYPE_UNIQUE_ID

可以传:

client IP
SNI=example.com
ALPN=h2
TLS version
connection id

v1 无法做到。


6. HAProxy 配置区别

HAProxy:

v1

server app 10.0.0.10:443 send-proxy

发送:

PROXY TCP4 ...

v2

server app 10.0.0.10:443 send-proxy-v2

发送:

binary PROXY v2

7. nginx 对应关系

nginx stream:

proxy_protocol on;

表示发送 PROXY Protocol。

但 nginx 没有 HAProxy 的:

send-proxy-v2

这种配置开关。

如果后端明确要求 PROXY v2

  • 使用 HAProxy/Envoy

  • 或修改 nginx stream 模块


8. 如何选择

场景推荐
只需要传 client IP v1 足够
普通 TCP 服务 v1
云 LB / Service Mesh v2
需要 SNI/ALPN/TLS 信息 v2
IPv6 大规模环境 v2
后端只支持某版本 必须匹配

对于你的场景(nginx stream -> SSL backend),核心不是 v1/v2 本身,而是:

  1. 后端支持哪一个版本;

  2. 后端是否在 TLS handshake 前解析 PROXY header。

如果后端只支持 send-proxy-v2,nginx 原生 stream 通常无法直接替代 HAProxy 的 send-proxy-v2

posted on 2026-07-10 00:26  小镇-做题家  阅读(4)  评论(0)    收藏  举报

导航