Conceitos, semelhanças e diferenças entre NGINX, Apache e WordPress

Você precisa conhecer melhor os servidores web NGINX e Apache e decidir o melhor a ser considerado em seu projeto WordPress.

Server web e a rede de audiência

NGINX e WordPress são dois softwares largamente populares. O primeiro conquistou muito espaço do Apache, enquanto o segundo, centenas de gerenciadores de conteúdo.

O servidor web Apache sempre foi muito popular. Eu, particularmente, tive meu primeiro contato com servidores web através dele.

Através da Apiki, estando por trás do desenvolvimento de grandes projetos em WordPress com estruturas modernas e audiência de milhões de usuários e Page Views, fui apresentado ao NGINX há alguns anos.

O NGINX é o servidor web focado em performance. Projetado para trabalhar com a concorrência de milhões de requisições e vem sendo a opção, praticamente unânime, dos novos projetos baseados em WP.

LAMP e as aplicações modernas

A sigla LAMP é comum entre as equipes de infraestrutura. LAMP é composto pelas iniciais de Linux, Apache, MySQL e PHP.

Estruturas de aplicações modernas não trabalham somente com essas tecnologias. Elas adicionam novos ingredientes e, em alguns casos, substituem. É o caso da troca do Apache pelo NGINX.

É muito comum termos a combinação: Linux, NGINX, MySQL (ou MariaDB, Amazon Aurora) e PHP + Node.js. Várias outras combinações podem ser utilizadas baseadas nas necessidades e requisitos dos projetos em questão.

A crescente também é considerável com o uso de cointaners através do Docker e o conceito de microservices.

As principais diferenças entre NGINX e Apache

NGINX versus Apache

Ambos são servidores web. Mas há consideráveis diferenças entre eles. A disparidade precisa ser conhecida, entendida e levada em consideração nas tomadas de decisões de negócios, desenvolvimento e manutenção.

Estatísticas de uso

Estatísticas de uso entre o NGINX e os servidos web
Source: Netcraft September 2015 Web Server Survey

O Apache, sem dúvidas, é o servidor web mais popular. No entanto, o NGINX vem a cada ano e de forma consistente ganhando espaço, popularidade e sendo a preferência dos novos projetos. Logo, a mudança e, por conseguinte, o primeiro lugar em uso será muito em breve.

Nas análises do site BuiltWith, conseguimos analisar sua participação de mercado em diferentes cenários. Em alguns casos, como o Top 10k sites ele fica empatado com o Apache.

.htaccess?

Apache tem uma configuração descentralizada, possivelmente espalhada em diversos diretórios da aplicação através do arquivo oculto .htaccess. Embora seja possível desabilitar essa opção, mas é prática muito comum mantê-la.

NGINX tem uma configuração centralizada, num único arquivo. Ele não reconhece, logo não interpreta, o .htaccess.

Módulos

Quase todos os softwares tem uma arquitetura que permite sua extensibilidade através de outros softwares que o complementam. Alguns com o WordPress o chamam de plugins, outros de add-ons. No caso dos servidores web o chamamos de “módulos”.

NGINX e Apache tem seu mecanismo de  módulos, mas trabalham de forma diferenciada um do outro. Através do segundo, os módulos podem ser carregados em tempo de execução, enquanto no primeiro os módulos são carregados dinamicamente e precisam ser compilados junto ao seu core.

Através dos módulos ambos conseguem ter as mesmas funcionalidades geralmente requisitadas, como: compressão de arquivos, autenticação, funcionalidade de e-mail, login, reescrita de URLs, Geolocalização, criptografia, Proxing e vários outros.

Arquivos e interpretação de URLs

Esse tipo de atividade nos servidores web é muito utilizada para uma infinidade de possibilidades, como a implementação de URLs amigáveis, bloqueio de determinados arquivos para maior segurança e várias outras regras.

Ambos permitem a interpretação direta dos arquivos quanto de forma abstrata. Expressões regulares são muito utilizadas para o encontro prático de uma combinação de possibilidades.

NGINX foi desenvolvido para ser tanto um servidor web quanto um servidor de proxy. Devido sua arquitetura requerida para essas duas atividades, sua interpretação primária são com URLs.

Enquanto isso, o Apache utiliza as diretrizes <Directoy>, <Files> e <Location>, o NGINX utiliza os blocos server e locations para interpretar todas as requisições.

Por ser configurado para interpretar diferentes padrões de URLs, o NGINX não verifica o sistema de arquivos até que ele esteja preparado para servir a requisição, o que explica a não implementação de um mecanismo como arquivo .htaccess como o Apache.

As regras de segurança e performance

Todo servidor web precisa aplicar regras de segurança para proteção das aplicações que estão rodando em seu mecanismo. Todas as dicas que você encontrar sobre segurança e que serão aplicadas em servidores web, saiba que é possível, em quase 100% dos casos, aplicar em ambos.

Atente-se que no Apache as regras normalmente serão aplicadas no arquivo .htaccess ou no httpd.conf. Já no NGINX nos blocos server/locations no arquivo de configuração.

O mesmo se aplica as regras para melhorias de performance, como otimização de imagens, aplicação de regras de cachê e compressão de arquivos.

Conclusão

Como eu havia dito, os novos projetos estão sendo elaborados com arquiteturas mais modernas e conceitos inovadores. Nesse quesito, o uso do NGINX tem sido mais aplicável e sendo a opção das maiorias das equipes, seja dos desenvolvedores ou SysAdmins.

As equipes de marketing quando conhecem a diferença de lidar com picos de audiência entre NGINX e Apache, passam a sugerir o primeiro por conseguirem melhor desempenho e atendimento de várias requisições simultâneas.

O mesmo acontece com as equipes de produto. Os casos de sucesso do NGINX tem permitido manter um servidor com menor custo e maior resposta a demanda de crescimento.

No WP Host, o produto de hospedagem WordPress da Apiki, estamos aplicando a migração de toda a base para o NGINX e será muito em breve a única opção de servidor web que suportaremos.

  • Charles Alano Müller

    Uma dúvida de quem não conhece o NGINX. Se não existe a figura do .htaccess como funciona a reescrita de URLs e redirecionamentos 301/302?