Уменьшите дублирование в haproxy acl с несколькими разделами внешнего интерфейса

Я использую haproxy с stunnel, обрабатывающим SSL (и использую режим прокси для сохранения исходного IP-адреса от haproxy).

У меня есть несколько тестов acl, которые перенаправляют на разные серверные части в зависимости от домена, заголовков или пути.

Проблема в том, что они идентичны вне зависимости от того, заходите вы через http или https, но я должен продублировать их в конфигурации. Есть ли способ уменьшить дублирование?

Вот пример конфигурации:

global
    user haproxy
    group haproxy
    #etc...

frontend http-in
    bind *:80

    acl files_path path_beg /files/
    acl beta_host hdr_beg(host) -i beta.

    use_backend files if files_path
    use backend beta_host
    default_backend appservers

frontend https-in
    bind *:442 accept-proxy

    acl files_path path_beg /files/
    acl beta_host hdr_beg(host) -i beta.

    use_backend files if files_path
    use backend beta_host
    default_backend appservers


backend appservers
    balance roundrobin
    option forwardfor

    server appserver_1 localhost:8080 weight 1
    server appserver_2 192.168.1.101:8080 weight 1

backend files
    balance roundrobin
    option forwardfor
    server file1 192.168.1.102 weight 1
    server file2 192.168.1.103 weight 1

backend beta
    balance roundrobin
    server beta1 192.168.1.104 weight 1

Http-in и https-in имеют разные порты, а https-in должен разделять accept-proxy, чтобы stunnel мог использовать протокол прокси для передачи ему исходного IP-адреса пользователя. Но в остальном они идентичны и всегда должны быть идентичными. Есть ли способ уменьшить это дублирование? (haproxy 1.5-dev)


person James51    schedule 19.08.2012    source источник
comment
FWIW, вы можете использовать опцию stunnel для отправки IP-адреса через HTTP-заголовок X-Forwarded-for.   -  person Milan Babuškov    schedule 11.10.2012
comment
stunnel - замечательная программа, но почему бы просто не отключить SSL в HAproxy? Это здорово!   -  person mwp    schedule 05.08.2016


Ответы (2)


вы можете просто привязать один http в интерфейсе к обоим.

frontend http-in
  bind *:80
  bind 0.0.0.0:443 transparent
person frank-dspeed    schedule 25.01.2015

К сожалению, руководство по haproxy (http://haproxy.1wt.eu/download/1.5/doc/configuration.txt) указывает, что acl можно определять только в разделах внешнего интерфейса, прослушивания и внутреннего интерфейса.

Если интерфейсы https и http совпадают, вы можете определить несколько предложений связывания в одном интерфейсе.

person George Shuklin    schedule 07.04.2014