Reverse Proxy to a URL

1

Eu tenho um servidor Ubuntu 12.04.3 configurado agindo como servidor DNS (BIND9), servidor web (Apache2) e um servidor proxy reverso (haproxy). Meu objetivo é redirecionar haproxy para alguns dos outros servidores da rede, alguns dos quais eu quero redirecionar para uma "sub-URL" (não tenho certeza se é o termo certo. Por favor, veja o exemplo abaixo)

o usuário acessa "monitor.example.com" > O haproxy redireciona para o > "1.1.1.1:80/nagios"

Meu servidor DNS está configurado usando subdomínios curinga, e agora, se eu for monitor.example.com, ele acessa a página padrão do apache no servidor monitor, mas ele ficaria muito melhor e seria muito mais curto para digite se eu conseguir direcionar para a página / nagios automaticamente. Se eu for monitorar.example.com/nagios, ele funciona como esperado, mas é um pouco redundante.

Eu passei um tempo procurando por uma solução, mas não estou tendo sorte em encontrar a resposta para minha pergunta. Alguém tem alguma idéia se isso é possível e, em caso afirmativo, como posso resolvê-lo? Aqui está o meu arquivo haproxy.conf:

global
    log 127.0.0.1   local0
    log 127.0.0.1   local1 notice
    #log loghost    local0 info
    maxconn 4096
    #chroot /usr/share/haproxy
    user haproxy
    group haproxy
    daemon
    #debug
    #quiet

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    retries 3
    option redispatch
    maxconn 2000
    contimeout      5000
    clitimeout      50000
    srvtimeout      50000

frontend http-in
    bind 1:80

    acl host_apache hdr(host) -i example.com
    acl host_monitor hdr(host) -i monitor.example.com
    acl host_cloud hdr(host) -i cloud.example.com

    use_backend apache if host_apache
    use_backend monitor if host_monitor
    use_backend cloud if host_cloud


backend apache
    server web3 127.0.0.1:81

backend monitor
    server monitor 1.1.1.1:80/monitor

backend cloud
    server cloud 2.2.2.2:80

Se alguém tiver outras sugestões ou um programa diferente que eu possa usar para atingir meu objetivo, estou aberto a sugestões. Eu não estou usando haproxy por qualquer motivo particular. Eu tentei libra também, mas não consegui configurá-lo também.

Obrigado pela leitura!

Brigzzy

    
por Brigzzy 31.01.2014 / 06:19

1 resposta

0

Enquanto eu amo o HAProxy, eu concordo com o davidgo que provavelmente não é a melhor ferramenta para este trabalho. Eu também acho que o Apache com vários vhosts nomeados e mod_rewrite para solicitações de proxy para o backend necessário são o caminho a percorrer.

Listen 80
NameVirtualHost *:80

<VirtualHost *:80>
  ServerName example.com
  RewriteEngine on
  ProxyPreserveHost On
  RewriteRule ^/(.*)$ http://127.0.0.1:81/$1 [P]
</VirtualHost>

<VirtualHost *:80>
  ServerName monitor.example.com
  RewriteEngine on
  ProxyPreserveHost On
  RewriteRule ^/(.*)$ http://1.1.1.1:80/monitor/$1 [P]
</VirtualHost>

Dependendo de seus aplicativos no back-end, as reescritas podem ou não funcionar exatamente como você espera. Por exemplo, se o nagios estiver esperando que seus recursos estejam localizados sob um diretório raiz de / monitor, e ele esteja vinculado a coisas como / monitor / someurl, sua reescrita fará com que o URL termine em / monitor / monitor / someurl pelo vez que atinge o seu servidor. Isso provavelmente poderia ser superado por outro RewriteRule, ou um pouco de regex no atual.

Você também pode usar apenas mod_proxy direto com diretivas ProxyPass ao invés de mod_rewrite (que, neste caso, também está utilizando mod_proxy)

    
por 07.02.2014 / 13:06