如何在 AWS Loadbalancer 后面的 HAProxy 上访问 X-Forwarded-For 标头

如何在 AWS Loadbalancer 后面的 HAProxy 上访问 X-Forwarded-For 标头

在 K8S 上运行的 HAProxy 实例上,我需要在 HAProxy 上手动阻止某些 IP 地址。目前我已经无法记录它们。根据 AWS 文档,负载均衡器设置X-Forwarded-For请求标头并填写客户端 IP 地址。

当尝试记录此标头(以及客户端 IP)时,使用 HAProxy 版本 2.0.18 和 2.2.20 时,我总是得到空字符串。所以我猜,我错误配置了 HAProxy。我的配置如下:

global
    daemon
    maxconn 256
    log stdout format raw local0

defaults
    mode http

    option  httplog
    option  dontlognull

    timeout connect 15000ms
    timeout client 150000ms
    timeout server 150000ms

userlist global_auth
    user someuser insecure-password somepass

frontend http-in
    bind *:80
    bind *:443 ssl crt /etc/certs/myapp-de.pem/cert_bundle_key.pem alpn h2,http/1.1

    option  httplog
    option  dontlognull

    capture request header X-Forwarded-For len 500
    capture request header x-forwarded-for len 500

    log-format "Headers = --%hr--, --%hrl-- | Headers2: --%[capture.req.hdr(0)]--, --%[capture.req.hdr(1)]--"
    log global

    acl host_ssl_exception hdr(host) -i jobs.myapp.com

    redirect scheme https code 301 if !{ ssl_fc } !host_ssl_exception

    acl is_post method POST|OPTIONS
    acl is_get  method GET

    default_backend myapp-web

backend myapp-web
    mode http
    compression algo gzip
    compression type text/html text/plain text/css application/javascript application/json
    server web1 myapp-web.myapp-${TRACK}.svc.cluster.local:80 maxconn 32 cookie check

除一个后端外,其他所有后端均已删除。已启用 HTTPS 和 HTTP2。似乎capture失败了,但目前我不明白为什么。

答案1

添加发送代理你的服务器配置行后端 myapp-web配置以便接收客户端的正确IP。

相关内容