Apache turbinado com Nginx

Quando falamos do VPS+: a nova geração de VPSs da PortoFácil, abordamos de leve a questão da utilização do nginx (pronuncia-se “engine X”) em proxy com o Apache, para aumentar sua performance. Neste artigo pretendemos explicar da maneira mais simples possível como essa tecnologia funciona e por que ela implica em ganho de performance para o servidor.

Que tal uma turbina auxiliar para fazer a principal ainda melhor?

Em linhas gerais, o servidor web e o cliente (o navegador do visitante) cumprem os seguintes passos.

  1. O cliente inicia uma requisição para o servidor.
  2. O programa se conecta ao seu servidor (o SEU, não o dele).
  3. Seu servidor (o Apache, em ambientes baseados no cPanel) cria um novo processo para manipular a requisição.
  4. Caso o cliente tenha requisitado um conteúdo dinâmico, o servidor web executa um ou mais processos em modo CGI, ou ativa seu módulo interno (como o mod_php) e aguarda até que a requisição tenha sido processada. Ao receber a página resultante o servidor a envia para o cliente.
  5. Caso o cliente tenha requisitado algum arquivo estático, o servidor web envia o arquivo para o cliente.
  6. O navegador do cliente recebe a resopsta, fecha a conexão com o servidor e exibe o conteúdo.Falando assim, de um único objeto, parece simples.

Agora multiplique este processo pela quantidade de objetos que há numa página (imagens, arquivos CSS, de JavaScript, animações em Flash, etc), e multiplique novamente pela quantidade de requisições simultâneas para ter uma ideia um pouco mais aproximada do trabalho pesado que o Apache tem de fazer a cada instante de sua “marvada” vida.

E ainda mais “marvada” se considerarmos que, por definição, os clientes são lentos, e em muitos casos o Apache vai manter um processo aberto — consumindo memória e ciclos de processamento — apenas aguardando que o cliente termine de baixar o conteúdo servido pelo webserver.

Como a capacidade de processamento dos servidores (computadores, nesse caso) é finita, a solução para garantir que uma mesma máquina possa atender mais visitantes simultâneos é simples: adicionar mais memória e processador, para que o Apache tenha recursos para rodar todos os processos simultâneos que este cenário implica.

Ou então — para quem tem coisa melhor a fazer com seu dinheiro do que investir em hardware quando a solução pode vir por software (livre, ainda por cima) — instalar um outro servidor web “em paralelo” com o Apache para dividir o trabalho. Naturalmente um servidor muito mais leve, que requeira muito menos memória para executar seus processos. No caso em análise, o nginx trata de todo o conteúdo estático do website, e o Apache só tem que lidar com a parte dinâmica.

Desta forma conseguimos uma redução bastante grande no número de processos “filhos” abertos pelo Apache (no passo 3 do esquema acima), pois em vez de abrir um novo processo para cada objeto estático, ele vai deixar que o único processo de comunicação com o nginx delegue a requisição, sobrando tempo e recursos para processar os scripts que realmente dependem do Apache para funcionar.

A título de esclarecimento: o nginx é um servidor web completo, e a única razão de termos escolhido rodá-lo como proxy no Apache foi para não quebrar a compatibilidade com o cPanel, de cujas facilidades a maior parte dos clientes não pode abrir mão.

Na maioria dos casos não é necessário modificar nenhum script do website para tirar vantagem dessa configuração que agora é a padrão para todos os VPSs da PortoFácil: basta ativar o nginx em proxy e curtir a vida vendo o servidor aumentar automagicamente sua capacidade de atendimento de requisições.

Helicópteros Apache

Estes também são apaches, mas de outro tipo.

A utilização do nginx em conjunto com o cPanel tem dois efeitos colaterais que podem impedir o seu uso por parte de quem revende hospedagem.

  • O tráfego gerado pelo nginx não aparece nos relatórios de consumo de banda do cPanel/WHM — o que geraria um controle subestimado do consumo de banda de cada cliente da revenda.
  • É necessário rodar um pequeno script manualmente (até que encontremos uma solução melhor) ao final do processo de criação de uma nova conta, a fim de gerar a configuração do nginx necessária para o novo domínio — o que inviabilizaria a vida de quem cria e apaga muitos domínios diariamente. Atualização: isto não é mais verdade: agora os servidores com Nginx criam e deletam domínios de maneira transparente pelo cPanel/WHMM, sem a necessidade de intervenções externas.

Falar de assuntos técnicos, potencialmente espinhosos, sem cair na superficialidade, é um desafio que, em se tratando de Apache e nginx, parece-me impossível de ser cumprido. Diversos termos técnicos ficaram de fora do presente texto, intencionalmente, porque não serviriam ao propósito de informar em linhas gerais, em vez de formar relatar especificações técnicas deste ou daquele programa.

Mas satisfeito mesmo estarei é quando receber a primeira mensagem do primeiro cliente a acreditar no poder do nginx dizendo que valeu a pena a mudança, e que doravante não quer saber de outra coisa!

3 Comentários

  1. Janio,
    a única coisa que entendi do artigo foi o passo a passo de busca de páginas. Mas estou rindo até agora por causa da “marvada” vida do Apache! Me lembrou da minha infância, quando eu era criança pequena lá no interior de Minas Gerais, vivendo uma “marvada” vida durante as intermináveis secas! Vim pro Sul pra evitar isso, e não é que aqui também tem gente vivendo uma vida “marvada” por causa da seca? Só Deus mesmo pra explicar esses mistérios! Abração!

  2. Twitter Comment


    quer ajudar sua hospedagem favorita? faça um post linkando a palavra nginx para [link to post]

    -

  3. Twitter Comment


    RT @portofacil: quer ajudar sua hospedagem favorita? faça um post linkando a palavra nginx para [link to post]

    -

Trackbacks/Pingbacks

  1. Produtos | PortoFácil - [...] Nossos VPSs contam com o Nginx instalado em modo de proxy com o Apache, para que você extraia o ...

Deixe Seu Comentário

Powered by WP Hashcash

Clicky Web Analytics