Pular para o conteúdo
Início » Introdução ao Nginx: Guia Completo para DevOps e Infraestrutura

Introdução ao Nginx: Guia Completo para DevOps e Infraestrutura

Nginx é um servidor web robusto e eficiente, amplamente utilizado em infraestruturas modernas. Diferente de servidores web tradicionais, que utilizam uma arquitetura multithread, o Nginx emprega uma arquitetura baseada em eventos não-threaded. Essa abordagem permite lidar com milhares de conexões simultaneamente, tornando-o ideal para websites de alto tráfego.

Além de servir páginas estáticas, o Nginx é altamente versátil e pode ser configurado para desempenhar diversas funções, como balanceamento de carga, cache HTTP e atuar como proxy reverso. Essas capacidades tornam o Nginx uma peça fundamental em arquiteturas web complexas.

Proxy Reverso e Proxy Normal

Para entender o papel do Nginx como proxy reverso, é essencial diferenciar entre um proxy normal e um proxy reverso:

  • Proxy Normal: Nesse cenário, o cliente envia uma requisição ao proxy, que a encaminha para o servidor. O servidor não sabe quem é o cliente original, interagindo apenas com o proxy. Essa configuração é útil para privacidade e para contornar restrições geográficas.
  • Proxy Reverso: Por outro lado, o proxy reverso fica entre o cliente e múltiplos servidores backend. O cliente faz a solicitação ao proxy, que decide qual servidor processará a requisição. O cliente não sabe qual servidor específico foi utilizado. O Nginx é amplamente usado como proxy reverso devido à sua eficiência e flexibilidade.

Exemplo de Proxy Reverso com Nginx:

  • Requisições para /admin podem ser encaminhadas ao Servidor 1.
  • Requisições para /settings podem ser encaminhadas ao Servidor 2.
server {
    listen 80;
    server_name example.com;

    location /admin {
        proxy_pass http://server1;
    }

    location /settings {
        proxy_pass http://server2;
    }
}

Vantagens do Nginx

O Nginx oferece várias vantagens que o tornam uma escolha preferida para projetos web:

  • Alta Conexão Simultânea: Capacidade de lidar com mais de 10.000 conexões simultâneas.
  • Cache HTTP: Reduz a carga do servidor e melhora o tempo de resposta.
  • Proxy Reverso: Encaminha requisições para o servidor apropriado.
  • Balanceamento de Carga: Distribui requisições entre vários servidores.
  • Gateway de API: Gerencia e roteia requisições de API.
  • Servir Arquivos Estáticos: Serve e armazena em cache arquivos como imagens e vídeos de forma eficiente.
  • Terminação SSL: Gerencia certificados SSL para conexões seguras.

Instalação e Configuração do Nginx

1. Usando Docker

Para instalar e configurar o Nginx em um container Docker:

Passo 1: Baixe e inicie um container Ubuntu:

docker run -it -p 8080:80 ubuntu

Passo 2: Instale o Nginx:

apt-get update
apt-get install nginx

Passo 3: Verifique a instalação:

nginx -v

2. Instalação no Host

No Ubuntu ou Debian, utilize os comandos abaixo:

sudo apt update
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl status nginx

No CentOS, Red Hat ou Fedora:

sudo yum update
sudo yum install nginx
sudo systemctl start nginx
sudo systemctl enable nginx

Configuração Básica do Nginx

O arquivo principal de configuração do Nginx é o nginx.conf, geralmente localizado em /etc/nginx/nginx.conf. Um exemplo básico de configuração:

worker_processes auto;

events {
    worker_connections 1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    }
}

Detalhamento:

  • worker_processes auto: Ajusta automaticamente o número de processos worker com base nos núcleos da CPU.
  • worker_connections 1024: Define que cada worker pode lidar com até 1024 conexões simultâneas.
  • http: Bloco principal para configurações de requisições HTTP.
  • server: Define as configurações de um servidor virtual.
  • location /: Manipula requisições para o diretório raiz.

Criando um Site Básico com Nginx

  1. Crie um diretório para o projeto:
mkdir -p /www/data
echo "<h1>Bem-vindo ao Nginx</h1>" > /www/data/index.html
  1. Configure o Nginx para apontar para o diretório criado:
server {
    listen 80;
    server_name localhost;
    root /www/data;

    location / {
        try_files $uri $uri/ =404;
    }
}
  1. Recarregue o Nginx:
nginx -s reload
  1. Acesse: http://localhost.

Recursos Avançados

Cache com Nginx

O Nginx pode armazenar respostas em cache para melhorar a performance.

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;

server {
    location / {
        proxy_cache my_cache;
        proxy_pass http://backend_server;
    }
}

Balanceamento de Carga

Distribua o tráfego entre múltiplos servidores backend:

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

Habilitando SSL

Configure conexões seguras com SSL/TLS:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    location / {
        root /var/www/html;
        index index.html;
    }
}

Redirecione HTTP para HTTPS:

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

O Nginx é uma ferramenta indispensável na construção de serviços web modernos. Sua arquitetura leve e eficiente, somada à flexibilidade, faz dele a escolha principal para desenvolvedores e equipes DevOps. Seja como proxy reverso, balanceador de carga ou servidor web, o Nginx entrega alta performance e confiabilidade para atender às demandas de infraestrutura de alto tráfego.

Explore e implemente essas configurações para maximizar o potencial do Nginx em seus projetos!