Como obter redirecionamentos de porta para dois servidores em execução no mesmo servidor?

1

Eu tenho uma nuvem da Amazon em execução que hospeda duas instâncias do tomcat (portas 8080 e 8081) com cada tomcat executando um aplicativo da Web (foo e bar) para clientes diferentes.

No entanto, estou com um problema ao tentar fazer com que o redirecionamento da porta funcione corretamente.

Eu quero que os usuários que chegam ao meu site em www.foo.com sejam redirecionados automaticamente para www.foo.com:8080/foo_app e usuários que acessam meu site em www.bar.com para serem redirecionados automaticamente para www.bar.com:8180/bar_app .

Mas também quero que os números das portas NÃO façam parte do URL. Isso é de vital importância já que a maioria dos usuários está em ambientes em que eles não podem navegar para www.foo.com:8080 ou www.bar.com:8180 e só podem se comunicar na porta 80.

Qualquer pessoa que digitar www.bar.com/bar_app deve ser redirecionada para www.bar.com:8081/bar_app , mas a URL ainda deve ser www.bar.com/bar_app

A maneira como tentei alcançar isso é fazer o seguinte:

Eu usei o seguinte comando para mapear qualquer comunicação na porta 80 para a porta 8080

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

Isso é ótimo para os usuários foo, mas os usuários de barras também estão sendo redirecionados. É isso possível fazer este mapeamento iptable apenas aplicável a certos "servidores"?

Também adicionei entradas em /etc/apache2/httpd.conf

para permitir o mapeamento do meu servidor para o webapp real

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass / http://123.123.123.123:8080/foo_app
    ProxyPassReverse / http://176.34.212.135:8080/foo_app
    ServerName www.foo.com
    ServerAlias www.foo.com
</VirtualHost>

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass / http://123.123.123.123:8180/bar_app
    ProxyPassReverse / http://176.34.212.135:8180/bar_app
    ServerName www.bar.com
    ServerAlias www.bar.com
</VirtualHost>

Eu agradeceria muito a ajuda de qualquer pessoa que possa aconselhar sobre uma abordagem a ser tomada.

Obrigado

    
por Phil 17.04.2013 / 22:16

1 resposta

5

Você não precisa da configuração do iptables. Na verdade, é provavelmente de onde vem o seu problema. O Apache fará o proxy. O Apache recebe as solicitações na porta 80 para o nome de domínio e faz o proxy das solicitações para o servidor Tomcat correto na porta 8080 ou 8180, como você tem.

O que você tem geralmente é bom. Certifique-se de ter os mods habilitados (proxy, proxy_http).

a2enmod proxy
a2enmod proxy_http

Reinicie o Apache.

Estes podem já estar ativados - ele dirá se eles estavam.

Aqui está o que eu sugiro para suas entradas no VHost:

<VirtualHost *:80>
    ServerName www.foo.com

    ProxyPreserveHost On

    ProxyPass /foo_app http://123.123.123.123:8080/foo_app
    ProxyPassReverse /foo_app http://176.34.212.135:8080/foo_app

    RewriteEngine on

    RewriteRule ^/$ http://www.foo.com/foor_app

</VirtualHost>

<VirtualHost *:80>
    ServerName www.bar.com

    ProxyPreserveHost On

    ProxyPass /bar_app http://123.123.123.123:8180/bar_app
    ProxyPassReverse /bar_app http://176.34.212.135:8180/bar_app

    RewriteEngine on

    RewriteRule ^/$ http://www.bar.com/bar_app
</VirtualHost>

Com ProxyPass, eu sempre tenho o URL balanceado em ambos os lados - pode ser possível tê-los diferentes, mas nunca consegui. O acima é praticamente o que eu tenho em alguns dos meus servidores.

    
por 17.04.2013 / 22:28