haproxy forwardfor 简单说明

haproxy 也是支持X-Forwarded-For的,此特性在进行获取真是ip 得到时候比较有用,尤其是在多级haproxy 的时候

haproxy 的X-Forwarded-For可以在default,frontend,listen,以及backend 中使用

参考配置

  • 简单配置
backend webservers
  balance roundrobin
  option forwardfor
  server s1 192.168.56.20:3000 check
  server s2 192.168.56.21:3000 check
  • 移除一些可信ip
backend webservers
  balance roundrobin
  option forwardfor except 192.168.56.10 # 此处支持cidr 格式
  server s1 192.168.56.20:3000 check
  server s2 192.168.56.21:3000 check
  • 多网段场景
acl skipxff src 192.168.56.0/24 or 10.0.0.0/8
http-request set-header X-Forwarded-For %[src] if !skipxff

与nginx 的集成

与nginx 的集成,核心是nginx 以及haproxy 的位置,是nginx 在入口还是haproxy 在入口,个人比较喜欢的是nginx 放入口,haproxy 放后边

  • nginx 配置

核心是将ip 转发到upstream 的时候添加header, 有以下三种模式

proxy_set_header X-Forwarded-For $remote_addr; # 直接client ip, 适合nginx 就是第一层的

proxy_set_header X-Forwarded-For $http_x_forwarded_for; # 附带其他层转发的

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 附带其他层转发的,同时添加nginx的

参考资料

https://www.haproxy.com/documentation/haproxy-configuration-tutorials/proxying-essentials/client-ip-preservation/add-x-forward-for-header/

https://nginx.org/en/docs/http/ngx_http_realip_module.html

posted on 2025-06-30 08:00  荣锋亮  阅读(22)  评论(0)    收藏  举报

导航