Projetos práticos para aprender Nginx
Projetos Práticos para Aprender Nginx
Guia técnico com exemplos reais para dominar Nginx em produção, passo a passo. Abordo cenários de proxy, balanceamento, cache, e TLS sem enrolação.
Projeto 1: Configuração de proxy reverso para API Node.js
Objetivo: expor uma API Node.js por meio de Nginx, lidando com headers, timeouts e estabilidade. O proxy reverso atua como gateway, simplificando a gestão de certificado, logs e políticas de segurança.
- Defino um upstream para o serviço Node.js para facilitar o balanceamento simples se necessário.
- Redireciono o tráfego para o backend, preservando o host original e o IP do cliente.
- Configuro timeouts e headers para compatibilidade com HTTP/1.1 e keep-alive.
server {
listen 80;
server_name api.exemplo.com;
location / {
proxy_pass http://node-app:3000;
proxy_http_version 1.1;
# Cabeçalhos importantes
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Evita encerramento de conexões desnecessárias
proxy_set_header Connection "";
proxy_read_timeout 60;
}
}
Projeto 2: Balanceamento de carga simples com round-robin
Objetivo: distribuir requisições entre várias instâncias da aplicação para aumentar disponibilidade e throughput. Uso uma configuração de upstream com opções de balanceamento simples.
- Defino upstream com múltiplos backends.
- Opção de estratégia: round-robin (padrão), com melhoria opcional usando least_conn.
- Integro com o proxy_pass para encaminhar as requisições para o grupo de servidores.
upstream app_servers {
least_conn; # alternativa: por conexões mínimas
server 10.0.0.2:3000;
server 10.0.0.3:3000;
}
server {
listen 80;
server_name app.exemplo.com;
location / {
proxy_pass http://app_servers;
include /etc/nginx/proxy_params; # ajuste conforme sua distro
}
}
Projeto 3: Cache de conteúdo estático com expiração
Objetivo: reduzir load no backend ao servir assets estáticos diretamente pelo Nginx, com políticas de cache bem definidas para JS, CSS e imagens.
- Serviço de conteúdo estático com diretório raiz e path matching para cache.
- Encadeamento de regras para cache de cabeçalhos HTTP apropriados.
server {
listen 80;
server_name static.exemplo.com;
location / {
root /var/www/static;
try_files $uri $uri/ =404;
}
# Cache estático efetivo
location ~* \.(js|css|png|jpg|jpeg|gif|svg|woff2?|ttf)$ {
expires 90d;
add_header Cache-Control "public, max-age=7776000";
}
}
Projeto 4: TLS com Let’s Encrypt para Nginx
Objetivo: disponibilizar HTTPS com certificados válidos e renováveis automaticamente, mantendo uma configuração limpa para proxies e workloads internos.
- Redirecionamento de HTTP para HTTPS para exigir TLS.
- Configuração de certificado, parâmetros de segurança e TLS tramite Let’s Encrypt.
- Integração com backend através de upstream já utilizado.
# Redireciona HTTP para HTTPS
server {
listen 80;
server_name exemplo.com www.exemplo.com;
return 301 https://$host$request_uri;
}
# TLS
upstream app_servers {
server 127.0.0.1:3000;
}
server {
listen 443 ssl;
server_name exemplo.com www.exemplo.com;
ssl_certificate /etc/letsencrypt/live/exemplo.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemplo.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
proxy_pass http://app_servers;
}
}
Curtiu? Leve adiante seu aprendizado
Este guia traz fundamentos práticos para você aplicar rapidamente. Recomendo explorar conteúdos complementares para consolidar o entendimento e ampliar seu stack de produção:
Sou Apaixonado pela programação e estou trilhando o caminho de ter cada diz mais conhecimento e trazer toda minha experiência vinda do Design para a programação resultando em layouts incríveis e idéias inovadoras! Conecte-se Comigo!