Pesquisa de site

Por que considero o Nginx praticamente melhor que o Apache


De acordo com a última pesquisa de servidores web da Netcraft, realizada no final de 2017 (precisamente em novembro), Apache e Nginx são os servidores web de código aberto mais utilizados na Internet.

Apache é um servidor HTTP gratuito e de código aberto para sistemas operacionais do tipo Unix e Windows. Ele foi projetado para ser um servidor seguro, eficiente e extensível que fornece serviços HTTP em sincronia com os padrões HTTP vigentes.

Desde o seu lançamento, o Apache tem sido o servidor web mais popular na Internet desde 1996. É o padrão de fato para servidores Web no ecossistema Linux e de código aberto. Novos usuários do Linux normalmente acham mais fácil configurar e usar.

Nginx (pronuncia-se ‘Engine-x’) é um servidor HTTP gratuito, de código aberto e de alto desempenho, proxy reverso e um servidor proxy IMAP/POP3. Assim como o Apache, ele também roda em sistemas operacionais do tipo Unix e Windows.

Conhecido por seu alto desempenho, estabilidade, configuração simples e baixo consumo de recursos, ao longo dos anos tornou-se muito popular e seu uso na Internet está caminhando para patamares cada vez maiores. Agora é o servidor web preferido entre administradores de sistema experientes ou webmasters dos principais sites.

Alguns dos sites movimentados desenvolvidos por:

  • Apache são: PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com e muito mais.
  • Nginx são: Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud e muitos outros.

Existem inúmeros recursos já publicados na web sobre a comparação entre Apache e Nginx (eu realmente quero dizer artigos 'Apache Vs Nginx'), muitos dos quais explicam claramente em detalhes seus principais recursos e operações em vários cenários, incluindo medidas de desempenho em benchmarks de laboratório. Portanto isso não será abordado aqui.

Vou simplesmente compartilhar minha experiência e pensamentos sobre todo o debate, tendo experimentado o Apache e o Nginx, ambos em ambientes de produção baseados em requisitos para hospedagem de aplicações web modernas, no próximo seção.

Razões pelas quais considero o Nginx praticamente melhor que o Apache

A seguir estão os motivos pelos quais prefiro o servidor web Nginx em vez do Apache para entrega moderna de conteúdo da web:

1. Nginx é leve

Nginx é um dos servidores web leves que existem. Ele ocupa pouco espaço em um sistema em comparação com o Apache, que implementa um vasto escopo de funcionalidades necessárias para executar um aplicativo.

Como o Nginx reúne vários recursos básicos, ele depende de servidores web upstream dedicados de terceiros, como back-end Apache, FastCGI, Memcached, SCGI e servidores uWSGI ou servidores de aplicativos, ou seja, servidores específicos de linguagem, como Node.js, Tomcat , etc.

Portanto, seu uso de memória é muito mais adequado para implantações de recursos limitados do que o Apache.

2. Nginx é projetado para alta simultaneidade

Ao contrário da arquitetura orientada a processos ou threads do Apache (modelo de processo por conexão ou thread por conexão), o Nginx usa uma arquitetura escalável e orientada a eventos (assíncrona). Ele emprega um modelo de processo responsável que é adaptado aos recursos de hardware disponíveis.

Possui um processo mestre (que realiza as operações privilegiadas como leitura de configuração e ligação a portas) e que cria diversos processos trabalhadores e auxiliares.

Cada um dos processos de trabalho pode lidar com milhares de conexões HTTP simultaneamente, ler e gravar conteúdo em disco e se comunicar com servidores upstream. Os processos auxiliares (gerenciador de cache e carregador de cache) podem gerenciar operações de cache de conteúdo em disco.

Isso torna suas operações escalonáveis e resulta em alto desempenho. Essa abordagem de design o torna ainda mais rápido e favorável para aplicações modernas. Além disso, módulos de terceiros podem ser usados para estender as funcionalidades nativas do Nginx.

3. Nginx é fácil de configurar

O Nginx possui uma estrutura de arquivo de configuração simples, tornando-o muito fácil de configurar. Consiste em módulos controlados por diretivas especificadas no arquivo de configuração. Além disso, as diretivas são divididas em diretivas de bloco e diretivas simples.

Uma diretiva de bloco é definida por chaves ({ e }). Se uma diretiva de bloco puder ter outras diretivas entre colchetes, ela será chamada de contexto, como eventos, http, servidor e localização.

http {
	server {
		
	}
}

Uma diretiva simples consiste no nome e nos parâmetros separados por espaços e termina com ponto e vírgula (;).

http {
	server {
		location / {
				
				## this is simple directive called root
			   	root  /var/www/hmtl/example.com/;

		}
		
	}
}

Você pode incluir arquivos de configuração personalizados usando a diretiva include, por exemplo.

http {
	server {

	}
	## examples of including additional config files
	include  /path/to/config/file/*.conf;
	include  /path/to/config/file/ssl.conf;
}

Um exemplo prático para mim foi como consegui configurar facilmente o Nginx para rodar vários sites com diferentes versões de PHP, o que foi um pouco desafiador com o Apache.

4. Nginx é um excelente proxy de front-end

Um dos usos comuns do Nginx é configurá-lo como um servidor proxy, neste caso ele recebe solicitações HTTP de clientes e as passa para servidores proxy ou upstream mencionados acima, através de diferentes protocolos. Você também pode modificar os cabeçalhos de solicitação do cliente que são enviados ao servidor com proxy e configurar o buffer de respostas provenientes dos servidores com proxy.

Em seguida, ele recebe respostas dos servidores proxy e as repassa aos clientes. É muito mais fácil configurar como um servidor proxy em comparação com o Apache, pois os módulos necessários são, na maioria dos casos, habilitados por padrão.

5. Nginx é notável por servir conteúdo estático

Conteúdo ou arquivos estáticos são normalmente arquivos armazenados em disco no computador servidor, por exemplo, arquivos CSS, arquivos JavaScripts ou imagens. Vamos considerar um cenário em que você usa Nginx como frontend para Nodejs (o servidor de aplicativos).

Embora o servidor Nodejs (especificamente as estruturas Node) tenham recursos integrados para manipulação de arquivos estáticos, eles não precisam fazer nenhum processamento intensivo para entregar conteúdo não dinâmico, portanto, é praticamente benéfico configurar o servidor web para servir conteúdo estático diretamente para clientes.

O Nginx pode realizar um trabalho muito melhor ao lidar com arquivos estáticos de um diretório específico e pode evitar que solicitações de ativos estáticos obstruam os processos do servidor upstream. Isso melhora significativamente o desempenho geral dos servidores backend.

6. Nginx é um balanceador de carga eficiente

Para obter alto desempenho e tempo de atividade para aplicativos da Web modernos, pode ser necessária a execução de várias instâncias de aplicativos em servidores HTTP únicos ou distribuídos. Por sua vez, isso pode exigir a configuração do balanceamento de carga para distribuir a carga entre os servidores HTTP.

Hoje, o balanceamento de carga tornou-se uma abordagem amplamente utilizada para otimizar a utilização de recursos do sistema operacional, maximizar a flexibilidade, reduzir a latência, aumentar o rendimento, obter redundância e estabelecer configurações tolerantes a falhas – em diversas instâncias de aplicativos.

Nginx usa os seguintes métodos de balanceamento de carga:

  • round-robin (método padrão) – as solicitações para os servidores upstream são distribuídas em round-robin (na ordem da lista de servidores no pool upstream).
  • menos conectadas – aqui a próxima solicitação é enviada por proxy para o servidor com o menor número de conexões ativas.
  • ip-hash – aqui uma função hash é usada para determinar qual servidor deve ser selecionado para a próxima solicitação (com base no endereço IP do cliente).
  • Hash genérico – neste método, o administrador do sistema especifica um hash (ou chave) com o texto fornecido, variáveis da solicitação ou tempo de execução, ou sua combinação. Por exemplo, a chave pode ser um IP e uma porta de origem ou URI. O Nginx então distribui a carga entre os servidores upstream, gerando um hash para a solicitação atual e colocando-o nos servidores upstream.
  • Menos tempo (Nginx Plus) – atribui a próxima solicitação ao servidor upstream com o menor número de conexões atuais, mas favorece os servidores com os tempos médios de resposta mais baixos.

7. Nginx é altamente escalável

Além disso, o Nginx é altamente escalável e os aplicativos da web modernos, especialmente os aplicativos corporativos, exigem tecnologia que forneça alto desempenho e escalabilidade.

Uma empresa que se beneficia dos incríveis recursos de escalabilidade do Nginx é a CloudFlare. Ela conseguiu dimensionar seus aplicativos da web para lidar com mais de 15 bilhões de visualizações de páginas mensais com uma infraestrutura relativamente modesta, de acordo com Matthew Prince, cofundador e CEO da CloudFare.

Para uma explicação mais abrangente, confira este artigo no blog Nginx: NGINX vs. Apache: nossa visão de uma questão de uma década.

Conclusão

Tanto o Apache quanto o Nginx não podem ser substituídos um pelo outro, eles têm seus pontos fortes e fracos. No entanto, o Nginx oferece uma tecnologia poderosa, flexível, escalonável e segura para alimentar sites e aplicativos da web modernos de maneira confiável e eficiente. Qual é a sua opinião? Deixe-nos saber através do formulário de feedback abaixo.