Nginx vs Apache como proxy reverso, qual escolher

36

talvez esse tipo de pergunta tenha sido feito aqui, mas não encontrei nenhuma que realmente correspondesse à minha pergunta. Ouvi dizer que o desempenho do nginx é bastante impressionante, mas o Apache tem mais documentos, comunidade (leia-se: expert) para obter ajuda

Agora o que eu quero saber, como os dois servidores da web se comparam em termos de desempenho, facilidade de configuração, nível de personalização, etc. Como servidor proxy reverso em um ambiente vps?

Ainda estou pesando entre os dois para um aplicativo web ruby ​​(não ROR) servido com thin (um servidor web ruby).
Resposta específica será muito apreciada. A resposta geral que não toca na parte rubi está correta. Eu ainda sou novato em administração de servidores web.

mhd
fonte
tnx para Martin e respostas webdestroya, agora eu estou inclinado para nginx
mhd
Não faria mais sentido usar um proxy reverso projetado especificamente como verniz?
Ptman 21/05

Respostas:

31

Eu queria colocar isso em um comentário, pois concordo com o ponto mais importante da webdestroy como resposta, mas demorou um pouco demais.

Você está em um ambiente VPS, isso significa que você provavelmente terá pouca memória RAM. Por esse motivo, você desejará o Nginx, pois seu espaço de memória é menor que o Apaches.

Também não concordo com alguns dos argumentos mencionados.

Facilidade de configuração:
Nginx não é mais difícil que o Apache. É diferente. Se você está acostumado ao Apache, as alterações sempre serão mais difíceis, isso não significa que o estilo de configuração em si seja mais difícil. Migrei completamente do Apache para o Nginx há mais de um ano e hoje eu lutaria para configurar um servidor Apache, considerando o Nginx extremamente fácil de configurar.

Para Ruby: o
Nginx possui o Passenger, no entanto, geralmente o vejo descrito como o método inferior para conectar-se ao Ruby. Como não sou um programador Ruby, não posso verificar isso, mas geralmente vejo o Unicorn e o Thin mencionados como melhores alternativas.

Em conclusão: o
Nginx foi criado para ser um proxy reverso. Inicialmente, tudo o que fez foi servir arquivos estáticos e reverter o proxy para um servidor back-end via HTTP / 1.0. Desde então, o fastcgi, o balanceamento de carga e vários outros recursos foram adicionados, mas seu objetivo inicial era servir arquivos estáticos e proxy reverso. E faz isso muito bem.

Apache, pelo contrário, é um servidor web de uso geral. Não tenho dúvidas de que ele pode reverter o proxy perfeitamente, mas não foi projetado para ter um espaço mínimo de memória e, como resultado, requer mais recursos do que o Nginx, o que significa que meu argumento inicial do ambiente VPS entra em jogo.

Martin Fjordvald
fonte
+1 para o esclarecimento.
John Gardeniers
Eu iria até o ponto de recomendá-lo como seu único servidor web. veja meus comentários serverfault.com/questions/133481/… <- aqui. Estou usando-o como o único servidor da Web no meu VPS e recebi os outros usuários do FastCGI para seus aplicativos PHP / CGI.
Jason
Jason Estou usando-o como meu único servidor Web há mais de um ano e lida com milhões de páginas carregadas por dia. Concordo plenamente com a sua recomendação! :)
Martin Fjordvald
8

Desempenho:
NGinX. Esse servidor é conhecido por ser um dos servidores Web com melhor desempenho e é usado por muitas empresas diferentes (Notable, MediaTemple)

Facilidade de configuração:
Apache. A configuração do Apache é realmente simples e muito poderosa. O Nginx é poderoso, mas pode ser muito difícil de entender, pois parece mais uma linguagem de programação do que um arquivo de configuração.

Nível de personalização:
Apache. O Apache possui vários mods e outros plugins escritos para ele. Embora o Nginx ainda tenha plugins feitos para isso, acho que o Apache possui muito mais que o Nginx.

Para Ruby:
Eu sei que o Nginx pode ser usado como um poderoso balanceador de carga com o Mongrel / webrick. No entanto, o Apache possui Phusion / Passenger, o que torna a integração mais agradável.

Vencedor do proxy reverso:
NGinX

Mitch Dempsey
fonte
2
Estou interessado, não discutindo. Por que o Nginx é um vencedor para proxy reverso? O restante da sua resposta não faz realmente uma se destacar da outra. Na verdade, isso tende a favorecer o Apache.
John Gardeniers
1
Bem, porque na maioria das vezes, você deseja um proxy reverso devido à alta carga. O que significa que o desempenho é provavelmente o maior problema. Nesse caso, o Nginx foi o vencedor, e é por isso que o escolhi. Como um desenvolvedor, eu amo apache, mas de um "como posso obter o máximo desempenho a partir deste servidor web" ponto, eu iria com Nginx
Mitch Dempsey
8

O Nginx é baseado em eventos, enquanto o apache é baseado em processos. Sob carga alta, isso faz toda a diferença no mundo ... O Apache precisa bifurcar ou iniciar um novo encadeamento para cada conexão, enquanto o nginx não. Essa diferença aparece principalmente no uso da memória, mas também no tempo de resposta do usuário e em outras métricas de desempenho. O Nginx pode lidar com dezenas de milhares de conexões de manutenção de HTTP simultâneas em hardware moderno. O Apache usará de 1 a 2 MB de pilha para cada conexão; portanto, fazendo as contas, você pode lidar apenas com algumas centenas ou talvez mil conexões simultaneamente sem começar a trocar.

Usamos o nginx na frente do Apache e do IIS em nosso ambiente como um proxy de balanceamento de carga e cache, e não poderíamos estar mais felizes. Usamos duas caixas pequenas de isgin nginx no lugar de um par de dispositivos F5 alugados muito caros e nossos sites são muito mais rápidos nos tempos de resposta de medição e de sensação.

rmalayter
fonte
1

Eu estava no mesmo dilema que você cerca de duas semanas atrás.

Para lhe dar uma resposta realmente concisa: Na minha pesquisa, o nginx é realmente rápido e fácil de usar, mas só foi aceito para reverter arquivos estáticos de proxy. O resto são soluções que você precisa configurar ou criar um script do seu jeito.

O AFAIK nginx não possui arquivos htaccess, portanto, você deve encontrar o seu caminho, dependendo desse recurso.

AFAIK tudo o que é necessário funciona e já vi tutoriais.

Eu irei com o nginx na minha configuração de teste e criação de perfil. Eu tenho um aplicativo LAMP típico.

Eu li que existem pessoas que invertem o proxy e servem arquivos estáticos do nginx e passam todo o resto como o PHP para uma instância do Apache em execução. Eles alegam uma boa troca. Não tenho dados de desempenho sobre isso, mas você pode querer saber.

deploymonkey
fonte
2
Desabilitar substituições de htaccess no apache por motivos de desempenho é bastante comum, oferecer suporte a esse recurso em um servidor projetado para alto desempenho não faria muito sentido.
theotherreceive
Obrigado por adicionar essa declaração. O OP não é um administrador profissional, por isso precisamos ser claros.
Deploymonkey
1

Eu tive sérios problemas com o mod_proxy do Apache em uma variedade de plataformas em vários ambientes diferentes nos últimos anos. De tempos em tempos, ele simplesmente para de funcionar e a única solução parece ser reiniciar o servidor Apache.

Pessoalmente, eu não perguntaria "nginx vs Apache", mas "nginx vs lighttpd" - e essa é uma decisão muito mais difícil!

Mo.
fonte
Argumento válido, mas na última vez que verifiquei, o lighttpd ainda possuía bugs pendentes há muito tempo e era reconhecido por vazamentos de memória. Foi desaconselhado para implantação de produção pelos administradores. Isso mudou?
Deploymonkey
Ele tem ressalvas, certamente (especialmente quando servindo arquivos muito grandes), mas é significativamente mais estável do que o Apache como um proxy - Eu não tinha problemas reais em várias implementações nos últimos seis meses
Mo.
Tenho escrito off lighttpd da lista de candidatos por algum motivo esquecido :)
mhd