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的