Nginx: Poderoso, rápido e fácil

Para quem (assim como eu) começou com o PHP, uma das opções mais viáveis para servir projetos na Web sempre foi o ApacheOpen source, prático e disponível em quase toda hospedagem de respeito (afinal, ele vem por padrão em quase toda distro Linux), há anos que ele faz a famosa tríade “AMP” (ApacheMySQL e PHP).

Acontece que com as demandas recentes que a internet tem exigido de algumas aplicações Web (como Twitter e Facebook), a necessidade por performance começou a ser uma grande premissa em determinados tipos de projetos. E é apoiado nesse cenário que o Nginx vem ganhando cada vez mais força no mercado. Afinal, não é a toa que ele é conhecido por “aguentar porrada”.

A verdade sobre o Nginx (ou não)

Nginx é um servidor Webproxy reversoproxy balanceador de carga, e faz praticamente tudo que o Apache faz, só que muito mais rápido!

Técnicamente, o Nginx consome menos memória que o Apache, pois lida com requisições Web através do conceito de “event-based web server”, já o Apache é baseado no conceito “process-based server”. David E. Chen faz uma excelente analogia entre os dois conceitos em seu artigo “Explain “Event-Driven” Web Servers to Your Grandma“.

Eles não são necessariamente “concorrentes”, Apache e Nginx podem trabalhar juntos! É possível diminuir o consumo de memória do Apache fazendo com que as requisições Web passem primeiro pelo Nginx. Desse modo, o Apache não precisa servir arquivos estáticos, e pode depender do bom controle de cache feito pelo Nginx.

Bom, a intenção não é denegrir a imagem do Apache (até parece que um simples mortal como eu conseguiria tal feito), então vamos adiante.

Fácil?! Instalando e sendo bem recebido

Estou utilizando o Slackware 13.37 para realizar os procedimentos abaixo, mas acredito que eles possam ser executados em qualquer distribuição Linux, sem maiores problemas.

Vamos começar fazendo o download da versão mais recente (até então), direto do site oficial do Nginx:

$ wget http://nginx.org/download/nginx-1.0.11.tar.gz

O procedimento de instalação não difere em nada do método tradicional que estamos acostumados no Linux. Apenas lembre-se de executar o make install como root:

$ tar -zxvf nginx-1.0.11.tar.gz; cd nginx-1.0.11
$ ./configure
$ make
$ make install

Nginx será instalado em /usr/local/nginx/. Você pode iniciar o serviço através do comando (como root):

$ /usr/local/nginx/sbin/nginx

Acessando o seu localhost, o serviço estará pronto e dando boas vindas!

Configurando um servidor simples

Para homenagear o nosso amigo Apache, vamos fazer o Nginx servir um HTML com a clássica mensagem “It works”, em outra porta e path.

Abra (como root) o arquivo /usr/local/nginx/conf/nginx.conf, no final do arquivo, adicione a seguinte expressão antes do fechamento das chaves:

include example;

Esta expressão importará o arquivo /usr/local/nginx/conf/example, que criaremos a seguir:

server {
  listen        127.0.0.1:8080;
  server_name   example;
  access_log    /usr/local/nginx/logs/example.access.log;
  error_log     /usr/local/nginx/logs/example.error.log;
  location / {
    root  /var/www/example;
    index index.html index.htm;
  }
}

Intuitivo não?! Vamos criar o path onde armazenaremos o HTML:

mkdir /var/www/example
echo "It works! " > /var/www/example/index.html

Basta acessar o endereço localhost:8080, e pronto!

Como é possível perceber, os arquivos de configuração do Nginx são simples e intuitivos. Existem várias referências na Web ensinando a montar proxy reverso, servir páginas dinâmicas com FastCGI ou WSGI, utilizar SSL, etc. Nada que o bom amigo Google não possa resolver.

Considerações finais

Quer dizer que agora eu tenho que largar tudo e correr para utilizar o Nginx? A resposta é não.

Gosto dos ensinamentos do pessoal da 37Signals, e um deles é para deixarmos a preocupação com performance para quando isto for realmente um problema (caso contrário, ninguém começaria projetos em Ruby ou Python).

Portanto, se você tem um blog em WordPress servido através de um Apache… deixe estar. Garanto que o Apache é a melhor solução para você neste momento. E caso você venha a ter problemas com performance, garanto que instalar e configurar um Nginx dentro da sua infraestrutura será o menor dos seus problemas.

Referências

Fonte: Blog Klaus Laube

Klaus Peter Laube

Mais artigos deste autor »

Tecnólogo em Análise e Desenvolvimento de Sistemas pelo Centro Universitário de Jaraguá do Sul (UNERJ). Desenvolvedor Web de longa data, apaixonado por Python e defensor dos padrões Web. Escreve quando pode no http://www.klauslaube.com.br.


12 Comentários

Marcelo Costa Almeida
2

Bom dia Klaus!
Parabéns pelo artigo, realmente muito interessante. Até então eu só conhecia o Apache e graças ao seu artigo, agora também o Nginx.
Gostaria de saber se também é possível fazer funcionar o MySQL e PHP também no Nginx, assim como no Apache (AMP).
Se puder me responder, fico agradecido.
Obrigado.

Leitor
4

Klaus,
Primeiramente, parabéns pelo artigo, é muito bom saber que tem mais pessoas divulgando e, incentivando o uso do NGINX.
Quanto ao uso do mesmo, minha dúvida fica por conta da utilização do NGINX como balanceador de carga. Chegou a testar/configurar esta feature?
Minha idéia é colocar o NGINX frente à alguns servidores com JBoss, neste caso, não queria manter o Apache, e sim, somente o NGINX.
Abraço!

Klaus Peter Laube
5

Leitor,
Vi bem “por cima” sobre o uso do Nginx como balanceador. Conversando com um pessoal mais especialista em infra-estrutura, fiquei sabendo que é uma solução simples, de baixo custo, e que pode atender uma boa demanda. Mas que não possui muita flexibilidade em relação ao algoritmo que irá fazer esse balanceamento (http://wiki.nginx.org/HttpUpstreamModule).
Dependendo do nível de consumo, acredito que valha mais a pena utilizar uma ferramenta específica. Como por exemplo o HAProxy, que fiquei conhecendo após saber que o Instagram o utilizava em sua infra.

Gilson
6

Boa Tarde,
Belo artigo amigo,
O Ngnix funciona tanto em windows quanto linux correto?
O procedimento de instalação é igual?
Eu gostaria de montar um servidor local aqui em uma empresa para rodar um app de django que estou produzindo, acredito que com ele seja possível certo?
Obrigado

Michel
10

Parabéns pelo post, muito util.
Estou começando a conhecer o nginx. Logo apos instala-lo, o localhost passou a responder por ele, não tento mais acesso aos meus antigos localhost/pastas. Como posso usar os dois juntos?
Obrigado!

Thiago
11

Olá! Eu utilizava Apache para realizar os testes em ambiente local. Bastando acessar “localhost” eu tinha uma lista dos projetos que tenho trabalhado e salvos na /var/www.
Agora que migrei pro nginx, não consigo mais acesso a estes projetos. Apesar de ter feito algumas alterações, redirecionei o projeto pra pasta e mesmo assim não consigo acessar os mesmos. Sabe como devo proceder?

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!