Configuração do Proxy Reverso Nginx

1

Atualmente, tenho algumas centenas de aplicativos da Web espalhados em cerca de 20 servidores, e um proxy reverso ficava em frente a esses Pound e Haproxy. Pound está fazendo o http para https redirecionamento e criptografia SSL e, em seguida, encaminhando para a Haproxy que tem uma regra configurada para cada site para encaminhar para um dos servidores de back-end que executam o Tomcat. Todos os sites estão no mesmo domínio, por exemplo, www.domain.com/webapp1, www.domain.com/webapp2

O Pound e o Haproxy foram originalmente configurados pelo nosso provedor de hospedagem e, tendo ficado frustrados com o Pound, agora estou pensando em substituir essa configuração pelo Nginx. Eu estou em um ponto onde eu tenho o Nginx rodando em um ambiente de desenvolvimento fazendo o redirecionamento de https e SSL, e eu tenho algumas regras de configuração para o proxy em um back-end.

Estou realmente apenas após alguns conselhos sobre se esta é a melhor maneira de fazer isso, ou se seria melhor deixar a Haproxy lidando com todas as regras e apenas configurando o Nginx como um substituto para a Pound.

Minha preocupação é que eu configure o Nginx com as centenas de regras avançadas, como abaixo, e acabe com problemas de desempenho. Qualquer sugestão seria bem-vinda, obrigado.

location /webapp1/ {
     proxy_pass http://10.1.9.11:8080;
}

location /webapp2/ {
     proxy_pass http://10.1.9.11:8080;
}

location /webapp3/ {
     proxy_pass http://10.1.9.12:8080;
}
    
por MrRichT 23.06.2016 / 16:04

1 resposta

1

Não sei muito sobre haproxy , mas sei o suficiente sobre nginx para responder às suas preocupações com problemas de desempenho.

Observe que a configuração nginx é compilada em um formato amigável struct e mantida na memória, o arquivo não é lido em cada solicitação. Portanto, centenas de configurações location /... devem ser executadas quase tão rapidamente quanto chamar strlen() + strncmp() o mesmo número de vezes. Qual é insignificante em comparação com a configuração do soquete.

O URL é normalizado antes do início da correspondência , portanto, não há nada realmente inteligente sobre os jogos a menos que você use um dos operadores ( = , ~ , *~ , ^~ ).

Você pode usar uma correspondência de expressão regular ( ~ , *~ ) e, em seguida, uma lógica if para decidir entre os upstream servidores, mas que seria a solução lenta .

Por outro lado, se você tiver pelo menos um local regex, considere o uso do operador ^~ . Veja a resposta antiga, mas ainda relevante, de Martin Redmond sobre SO sobre diferentes operadores e como nginx corresponde a eles.

    
por 28.06.2016 / 21:27

Tags