Configuração do proxy reverso Nginx

Configuração do proxy reverso Nginx

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

Pound e Haproxy foram originalmente configurados por nosso provedor de hospedagem e, tendo ficado frustrado com Pound, agora estou pensando em substituir essa configuração por Nginx. Estou em um ponto em que tenho o Nginx rodando em um ambiente de desenvolvimento fazendo o redirecionamento https e SSL, e tenho algumas regras configuradas para fazer proxy para um back-end.

Na verdade, estou apenas atrás de alguns conselhos sobre se esta é a melhor maneira de fazer isso ou se seria melhor deixar o Haproxy cuidando de todas as regras e apenas configurar o Nginx como um substituto para o Pound.

Minha preocupação é configurar o Nginx com centenas de regras de encaminhamento como abaixo e acabar com problemas de desempenho. Qualquer sugestão será 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;
}

Responder1

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

Observe que nginxa configuração é compilada em um structformato amigável e mantida na memória, o arquivo não é lido a cada solicitação. Portanto, centenas de location /...configurações serão executadas quase tão rápido quanto uma chamada strlen()+ strncmp()o mesmo número de vezes. O que é insignificante em comparação com a configuração do soquete.

A URL énormalizado antes do início da correspondênciaportanto, não há nada realmente inteligente nas correspondências, a menos que você use um dos operadores ( =, ~, *~, ^~).

Você poderia usar uma correspondência de regex ( ~, *~) e então alguma iflógica para decidir entre os upstreamservidores, masessa seria a solução lenta.

Por outro lado, se você tiver pelo menos um local de regex, considere usar o ^~operador. Veja oresposta antiga, mas ainda relevante, de Martin Redmond no SOsobre diferentes operadores e como nginxcombiná-los.

informação relacionada