Como posso configurar um proxy reverso para vários aplicativos da Web e conteúdo estático?

2

Atualização: com base na resposta de Jesper Mortensen, aqui estão mais algumas informações. As aplicações são baseadas no HTTP :: Daemon do Perl . Eu planejo implantá-los em um servidor Linux.

Cada aplicativo faz algo diferente. Portanto, isso não é realmente balanceamento de carga, pois os servidores não são intercambiáveis. Estou mais familiarizado com o Apache do que com qualquer outra coisa, mas nunca o configurei para proxy.

Considere um cenário em que alguns aplicativos da web estão ouvindo em portas individuais (por exemplo, 8080 e 8888 ). A saída HTML desses aplicativos é dinâmica e específica para o usuário o tempo todo, portanto, não deve ser armazenada em cache, mas eles usarão um conjunto comum de imagens, arquivos CSS e JavaScript.

É possível ter um servidor atendendo em www.example.com:80 redirecionando solicitações para localhost:8000 para conteúdo estático, localhost:8080 e localhost:8888 , respectivamente, para solicitações específicas de aplicativos? Além disso, é possível usar https para o www.example.com externo enquanto os servidores nas portas 8000 , 8080 e 8888 use http ?

Eu tenho lido Capítulo 12 em Mod_perl prático e os exemplos de lula e parece que deveria ser possível, mas esta é a primeira vez que me debruço sobre proxies e reverse proxies e, portanto, não tenho certeza de como devo proceder e não tenho certeza sobre a terminologia, portanto, quaisquer ponteiros / correções também seriam muito apreciados.

    
por Sinan Ünür 14.10.2009 / 00:28

2 respostas

1

Sim, é possível, é até uma funcionalidade bastante normal. Você não fornece detalhes sobre o seu ambiente de servidor, infelizmente ...

Você pode distinguir entre sites em muitas partes da solicitação; mas o clássico é claro distinguir pelo nome de domínio totalmente qualificado de cada site, por exemplo, sitename1.somedomain.com, sitename2 .somedomain.com, sitename3.com et cetera.

Com o mod_perl e o Squid, parece que você está no Unix. O mod_rewrite do Apache é talvez a forma mais comum / antiga de conseguir isso no Unix. Note que dominar o mod_rewrite para configurar proxies seguros requer algum trabalho. (Se você configurar um proxy inseguro, ele permitirá a solicitação de proxy na parte externa do proxy, e os spammers poderão usá-lo incorretamente para fazer envios de formulários, etc. a partir do seu endereço IP.)

Outra abordagem comum no Unix é ter um servidor / proxy HTTP 'leve' no IP público (isto é, receber solicitações dos usuários) e permitir que o servidor 'leve' envie solicitações para 'mais pesadas' instâncias Apache / PHP / Perl / Python. Os benefícios são o melhor desempenho de várias conexões abertas e a redução do uso de RAM no servidor. nginx (EngineX) é um servidor popular para isso, e também tem um módulo de reescrita .

Em relação ao tratamento de HTTPS / SSL no primeiro servidor web; sim, esta é uma boa solução. Você deve configurar o SSL como normal e ter as solicitações de proxy do servidor da Web para esse nome de host nos servidores backend. Editar: É comum que o frontend 'acelerador de HTTPS' adicione cabeçalhos HTTP (X-Forwarded-Proto) à solicitação de back-end, para que os aplicativos de backend possam saber que a solicitação original veio por meio de uma conexão criptografada

O que você está vendo aqui é um sub-case de balanceamento de carga HTTP; ou seja, você está instalando um proxy HTTP em uma única máquina e usando-o para distribuir solicitações para outros servidores HTTP na mesma máquina. Existem muitos bons balanceadores de carga de software para sistemas Unix .

Se você está no Windows, o novo " Roteamento de Solicitação de Aplicativo " da Microsoft é muito bom. A versão 2 está no betatest agora, e melhorou muito em relação à versão 1 - encontre-a no site iis.net. Editar: Deve-se dizer que nunca versões do IIS são muito rápidas e escaláveis. A maioria dos usuários do IIS não se preocupam em configurar um proxy HTTP para um único servidor IIS, apenas criam hosts virtuais com o modelo de aplicativo adequado no próprio servidor IIS.

    
por 14.10.2009 / 02:16
3

Eu acho que você está certo. Não sei como fazer isso via perl ou squid, mas estou fazendo exatamente isso através do apache. Aqui está minha configuração:

<VirtualHost *:443>

     ProxyPass           /doc http://127.0.0.1:81/gdoc
     ProxyPassReverse    /doc http://127.0.0.1:81/gdoc

     ProxyPass           /rp01 http://server01.mydomain.local/rp01
     ProxyPassReverse    /rp01 http://server01.mydomain.local/rp01

     ProxyPass           /bugzilla http://bugzilla.mydomain.local
     ProxyPassReverse    /bugzilla http://bugzilla.mydomain.local

</VirtualHost>
    
por 14.10.2009 / 01:46