Назад | Перейти на главную страницу

Почему HAProxy не добавляет «X-Forwarded-For»?

Я следил за многочисленными ссылками в Интернете, которые говорят мне, что я просто могу настроить интерфейс, например:

frontend http_https
  bind 1.2.3.4:443 ssl crt /etc/haproxy/tls/mycert.pem
  bind 1.2.3.4:80
  mode http
  option httplog
  option forwardfor
  option http-server-close
  redirect scheme https code 301 if !{ ssl_fc }
  http-request set-header X-Forwarded-Port %[dst_port]
  http-request add-header X-Forwarded-Proto https if { ssl_fc }
  http-request set-header X-Request-Start t=%Ts%ms
  http-response set-header Strict-Transport-Security max-age=15768000
  use_backend %[req.hdr(host),lower,map(/etc/haproxy/domains-to-backends.map)]

Когда я беру tcpdump на моем внутреннем сервере я вижу все add-header и set-header заголовки, но я не вижу X-Forwarded-For заголовок.

Если я добавлю что-то вроде:

  http-request add-header X-Client-IP %[src]

Я вижу, что этот заголовок передан с правильным IP-адресом клиента.

Может ли кто-нибудь объяснить, почему это может не работать? Или по какой-либо причине я не должен просто использовать http-request set-header X-Forwarded-For %[src] вместо того option forwardfor?


Образец бэкэнд-раздела:

backend bk_foo
  balance roundrobin
  errorfile 502 /etc/haproxy/errorfiles/502.http
  errorfile 503 /etc/haproxy/errorfiles/503.http
  errorfile 504 /etc/haproxy/errorfiles/504.http
  option httpchk
  server foo.example.com 10.1.2.3:8080 check

изменить: вы должны поставить option forwardfor в бэкэнд-разделе. Не в разделе внешнего интерфейса.

Я не думаю, что с конфигурацией HAProxy что-то не так. Я сделал много конфигураций с опцией forwardfor без каких-либо проблем. Есть ли вероятность, что между HAProxy и внутренним сервером находится устройство, которое может удалять определенные заголовки? Также я бы предложил протестировать с простой настройкой, сосредоточив внимание на этом заголовке, чтобы убедиться, что другие конфигурации не вызывают проблемы.