HAProxy1.7 перенаправляет IP-адрес клиента на бэкэнд - PullRequest
1 голос
/ 05 августа 2020

Я пытаюсь перенаправить source / client_ip (% ci), который достигает haproxy, в приложение с помощью X_FORWARDED_FOR.

HA-Proxy версии 1.7.9 2017/08/18

global
    log 127.0.0.1 local1 info
    daemon
    user vcap
    group vcap
    maxconn 64000
    spread-checks 4

defaults
    maxconn 64000
    option http-server-close
    option httplog
    option forwardfor

frontend http-in
    mode http
    bind :80
    log global
    option forwardfor except 127.0.0.1

frontend https-in
    mode http
    log global
    bind :443 ssl crt /data/haproxy/ssl/server.pem
    option forwardfor except 127.0.0.1
    use_backend https-backend
    
    http-request set-header SSL_CLIENT_CERT_USER         %{+Q}[ssl_c_s_dn(cn)]
    http-request set-header SSL_CLIENT_CERT         %{+Q}[ssl_c_der,base64]
    http-request set-header SSL_CLIENT_CERT_USED    %[ssl_c_used] if no_user_cert

backend https-backend
    mode http
    log global
    balance roundrobin
    option forwardfor header X-Client
* Приложение 1005 *Java выполняет следующие действия:
String ipAddress = request.getHeader("HTTP_X_FORWARDED_FOR");
 
if (ipAddress == null) {
    ipAddress = request.getRemoteAddr();
}

Имея указанную выше конфигурацию, я получаю IP-адрес haproxy в журнале приложения, а не фактический IP-адрес источника.

Добавление набора- Заголовок во фронтенде или бэкэнде или с обеих сторон не помог: http-request set-header X-CLIENT-IP %[src].

Я делаю это неправильно?

1 Ответ

0 голосов
/ 05 августа 2020

Вам следует обновить последнюю версию 1.7. https://www.haproxy.org/bugs/bugs-1.7.9.html

Вы определяете option forwardfor header X-Client, поэтому ваше приложение должно получить заголовок X-Client.

String ipAddress = request.getHeader("HTTP_X_CLIENT");

Do c: вариант вперед для

...