haproxy encaminhar uri para a raiz de outro servidor

5

Eu uso um contêiner HAPROXY como um ponto de entrada para um cluster HPC virtual. Dependendo em um prefixo, a solicitação é encaminhada para contêineres diferentes.

:80/foswiki/ -> :80/foswiki/
:80/kibana/ -> :80/kibana/
:80/graphite-api/ -> :80/graphite-api/
...

A configuração que uso é bem simples:

frontend http-in
    bind *:80
    acl uri_foswiki path_beg /foswiki
    use_backend srv_foswiki if uri_foswiki
    # gitlab
    default_backend srv_gitlab

backend srv_foswiki
    balance roundrobin
    cookie SERVERID insert
    option httpclose
    option forwardfor
    server foswiki 172.17.0.3:80 cookie

O problema é que há um servidor que serve o site diretamente como root, sem um prefixo. "Grafite-web", e. ou a imagem do gitlab.

Eu tento cortar o prefixo e encaminhá-lo ainda mais, mas o que eu realmente quero, é que o haproxy mantenha o prefixo no caminho e que seja transparente para o servidor de backends. Se eu clicar em 'gitlab_server: 80 / dashboard /', deve aparecer como 'frontend_ip: 80 / gitlab / dashboard'.

backend srv_gitlab
    balance roundrobin
    #cookie SERVERID insert
    mode http
    reqrep ^([^\ ]*)\ /gitlab/(.*)     \ /
    balance roundrobin
    option forwardfor
    server gitlab 172.17.0.18:80 cookie

Eu não acho que seja algo difícil de fazer, mas parece-me, que minhas habilidades com o Google são um pouco prejudicadas. Toda vez que acabo com regras de reescrita que não guardam o prefixo.

Alguém? Christian

EDIT: Os endereços IP internos não podem ser acessados pelo usuário ...

    
por kniepbert 18.06.2014 / 09:15

1 resposta

1

Para se livrar das partes principais do URI, tente

reqrep ^(GET|POST)\ /gitlab/(.*) \ /

, por exemplo, extraia o HTTP method para e o caminho que segue a raiz do gitlab para , depois coloque-os em uma solicitação completa.

Observe que isso pode não ser útil para muitos aplicativos, porque o appserver não sabe que os clientes devem solicitar tudo de dentro de um diretório raiz gitlab/ virtual. Portanto, os redirecionamentos aparentemente "removerão" o importante diretório raiz.

Tais cenários são resolvidos mais facilmente, e. com nginx e seu mod_proxy ou até mesmo o Apache.

    
por 18.06.2014 / 15:11