![在 HAProxy 中访问代理协议地址](https://linux22.com/image/671201/%E5%9C%A8%20HAProxy%20%E4%B8%AD%E8%AE%BF%E9%97%AE%E4%BB%A3%E7%90%86%E5%8D%8F%E8%AE%AE%E5%9C%B0%E5%9D%80.png)
我正在运行 HAProxy,它从上游源接收第 4 层代理协议。我需要创建一个自定义 HTTP 标头,其中包含地址。我似乎找不到如何引用该 TCP 标头。
下面是我正在尝试做的事情的一个示例:
frontend http_in
bind *:1025 accept-proxy
mode http
default_backend http_out
backend http_out
mode http
http-request set-header X-Custom-Header %[<ip from proxy protocol header>]
server some-server some-server:80
我如何确保使用来自 L4 标头的地址而不是某些可欺骗的 http 标头来填充新标头?
答案1
根据文档绑定accept-proxy
选项,更一般地说是 PROXY 协议的使用,PROXY 协议头中包含的所有字段(源 IP 和端口、目标 IP 和端口)都替换了真实连接中的字段:
...
PROXY 协议规定了传入
连接的第 3/4 层地址,该地址将在使用地址的任何地方使用,唯一的
例外是“tcp 请求连接”规则,该规则只会看到
真实的连接地址。日志将反映协议中指示的地址
,除非违反协议,在这种情况下
仍将使用真实地址
。...
这意味着你的后端看起来会像这样
backend http_out
mode http
http-request set-header X-Custom-Header %[src]
server some-server some-server:80
这是有效的,因为src
示例字段将包含 PROXY 标头中定义的源 IP,而不是实际的源 IP。