Proxy do Apache para vários servidores: comparando duas soluções

1

Eu preciso configurar os proxies do Apache para vários servidores, um proxy para um servidor. Eu posso fazer isso de duas maneiras:

  1. Configure um host virtual e vários proxies. Cada servidor é servido como um subdiretório do host virtual: aaa.bbb.ccc / test1 e aaa.bbb.ccc / test2

    <VirtualHost *:443>
        ServerName aaa.bbb.ccc
        RewriteEngine on
        RewriteRule ^/test1$ /test1/ [R]
        RewriteRule ^/test1(.*) http://localhost:8080$1 [P]          
        RewriteRule ^/test2$ /test2/ [R]
        RewriteRule ^/test2(.*) http://localhost:8081$1 [P]
        <Location "/test1">
            ...
        </Location>
        <Location "/test2">
            ...
        </Location>
        ....
    </VirtualHost>
    
  2. Configure N hosts virtuais e N proxies, atendendo N servidores. Cada servidor será servido com um host virtual.

    NameVirtualHost *:443
    <VirtualHost *.443>
        ServerName aaa.bbb.ccc
        RewriteEngine on
        RewriteRule ^(.*) http://localhost:8080$1 [P]
        <Location "/">
            ...
        </Location>
    </VirtualHost>
    <VirtualHost *.443>
        ServerName ddd.bbb.ccc
        RewriteEngine on
        RewriteRule ^(.*) http://localhost:8081$1 [P]
        <Location "/">
            ...
        </Location>
    </VirtualHost>
    

Ambos funcionam. No entanto, não sei qual é o melhor. Alguém pode comparar os prós e contras das duas abordagens?

    
por user2196452 05.09.2014 / 06:11

1 resposta

1

Geralmente, não há nada errado com um ou outro modo. Mas a verdadeira grande diferença entre os dois será o gerenciamento de certificados. A opção 1 requer apenas 1 certificado para SSL. A opção 2 depende do que você está fazendo para nomes de hosts. Se a única coisa que está mudando é o subdomínio, você pode usar um certificado de curinga ou precisará de um certificado para cada host virtual. Ambos podem se tornar caros.

Geralmente, o que será o maior driver real entre as duas opções serão as decisões do tipo "negócios". Fazendo uma separação mais limpa entre os servidores internos.

Como você está realmente expondo os servidores internos para o exterior, não é a maneira mais eficaz. Tecnicamente está funcionando, mas você pode entrar em muitos problemas. Links nas páginas podem renderizar errado. No site externo, você estaria realmente expondo links internos e dará a aparência de que o site está quebrado. Imagens e Javascript também não funcionarão corretamente ou farão coisas engraçadas. Você realmente deveria estar usando Proxy e ReverseProxy

ProxyRequests off
ProxyPass /test1/ http://127.0.0.1:8080/
ProxyPass /test2/ http://127.0.0.1:8081/
ProxyHTMLURLMap http://127.0.0.1:8080 /app1
ProxyHTMLURLMap http://127.0.0.1:8081 /app2

<Location /test1/>
        ProxyPassReverse /
        ProxyHTMLEnable On
        ProxyHTMLURLMap  /      /test1/
</Location>

<Location /test2/>
        ProxyPassReverse /
        ProxyHTMLEnable On
        ProxyHTMLURLMap /       /test2/
</Location>
    
por 05.09.2014 / 08:29