Skip to main content

HAProxy Proxy Protocol

  • HAProxy Protocol - 主要用于保留原 IP
    • 希望基于来源 IP 做策略的一般都会支持
  • proxy-protocol.txt
    • v1 - 明文 PROXY TCP4 255.255.255.255 255.255.255.255 65535 65535\r\n\r\n
    • v2 - 支持二进制,支持更多协议
  • 使用场景
    • 想要知道原始 IP - 基于 IP 过滤
  • 支持的服务
  • 希望基于来源 IP 做策略的一般都会支持
  • 参考
# 测试
# 如果协议不匹配则会
# curl: (56) Recv failure: Connection reset by peer
curl --haproxy-protocol 127.0.0.1

HAProxy

frontend
frontend http
mode http
bind 0.0.0.0:80 name v4
bind :::80 name v6
tcp-request connection expect-proxy layer4

frontend https
mode http
bind 127.0.0.1:443 name v4 crt /etc/haproxy/certs/frontend ssl alpn h2,http/1.1 accept-proxy
bind :::443 name v6 crt /etc/haproxy/certs/frontend ssl v4v6 alpn h2,http/1.1 accept-proxy

frontend ssl
mode tcp
bind 0.0.0.0:443 name v4
bind :::443 name v6 v4v6
tcp-request connection expect-proxy layer4
backend
backend be
server svr 192.168.1.2:443 check send-proxy
# CURL 测试 proxy protocol
curl --haproxy-protocol 192.168.1.2
tcp-request connection expect-proxy layer4 if { src -f proxies.lst }

Nginx

http {
server {
listen 80 proxy_protocol;
listen 443 ssl proxy_protocol;

#set_real_ip_from 192.168.1.0/24;
#real_ip_header proxy_protocol;
}
}

stream {
server {
listen 12345 proxy_protocol;
}
}