Sumário
-
O que é Nginx?
-
Instalação e Inicialização
-
Detalhamento do Arquivo de Configuração
-
Implementação de Funcionalidades Essenciais
-
Casos de Configuração Comuns
-
Solução de Problemas
-
Otimização de Desempenho
-
Referência Rápida
-
O que é Nginx?
1.1 Compreensão Básica
Nginx é um servidor Web de alto desempenho e um servidor proxy reverso, utilizado principalmente para:
- Serviço de arquivos estáticos: Fornecimento rápido de HTML, imagens, CSS e arquivos JS
- Proxy reveerso: Encaminhamento de requisições para servidores de aplicação backend (como Node.js, PHP, Python)
- Balanceamento de carga: Distribuição de tráfego entre múltiplos servidores backend
1.2 Comparação com Apache
| Característica | Nginx | Apache |
|---|---|---|
| Desempenho | Extremo alto (100k+ concorrência) | Médio |
| Uso de memória | Muito baixo (2MB) | Allto |
| Arquivos estáticos | Excelente | Bom |
| Conteúdo dinâmico | Via proxy | Suporte integrado |
| Complexidade de configuração | Média | Simples |
1.3 Arquitetura Típica
Navegador → Nginx → Arquivos Estáticos | Proxy Reverso → Aplicação Backend (Node.js/PHP/Tomcat)
- Instalação e Inicialização
2.1 Instalação no Ubuntu/Debian
# Atualizar lista de pacotes
sudo apt update
# Instalar Nginx
sudo apt install nginx
# Iniciar serviço
sudo systemctl start nginx
# Iniciar com o sistema
sudo systemctl enable nginx
# Verificar status
sudo systemctl status nginx
2.2 Verificação da Instalação
# Verificar versão
nginx -v
# Testar arquivo de configuração
sudo nginx -t
# Recarregar configuração (sem interromper serviço)
sudo nginx -s reload
2.3 Teste de Acesso
Acesso via navegador: http://IP_DO_SERVIDOR
Resultado esperado: Exibição da página de boas-vindas "Welcome to nginx!"
- Detalhamento do Arquivo de Configuração
3.1 Localização dos Arquivos
/etc/nginx/nginx.conf # Arquivo de configuração principal
/etc/nginx/sites-available/ # Diretório de configurações de site
/etc/nginx/sites-enabled/ # Links para sites habilitados
/var/www/html/ # Diretório raiz padrão do site
3.2 Estrutura Central
# Configuração global
worker_processes 1; # Número de processos de trabalho
# Configuração de eventos
events {
worker_connections 1024; # Máximo de conexões por processo
}
# Configuração do serviço HTTP
http {
# Tipos MIME
include /etc/nginx/mime.types;
# Bloco de servidor (host virtual)
server {
listen 80; # Porta de escuta
server_name exemplo.com; # Nome do domínio
location / { # Regra de correspondência de URL
root /var/www/html;
index index.html;
}
}
}
3.3 Explicação dos Conceitos Chave
- Bloco server: Configuração de um site
- Bloco location: Regras de correspondência de caminho de URL
- listen: Porta de escuta (80=HTTP, 443=HTTPS)
- root: Diretório de arquivos do site
- index: Arquivo de página inicial padrão
- Implementação de Funcionalidades Essenciais
4.1 Implantação de Site Estático
Objetivo: Implantar um site HTML simples
Passos: 1. Criar arquivos do site ```
sudo mkdir -p /var/www/meusite
cat > /var/www/meusite/index.html << EOF
<html>
<head><title>Meu Site</title></head>
<body><h1>Olá Nginx!</h1></body>
</html>
EOF
```
-
Configurar host virtual ```
sudo nano /etc/nginx/sites-available/meusite**Conteúdo do arquivo de configuração**:server { listen 80; server_name meusite.local; root /var/www/meusite; index index.html; location / { try_files $uri $uri/ =404; } } -
Habilitar site ```
sudo ln -s /etc/nginx/sites-available/meusite /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx -
Teste local ```
# Editar arquivo hosts echo "127.0.0.1 meusite.local" | sudo tee -a /etc/hosts # Acessar via navegador curl http://meusite.local
4.2 Prática de Proxy Reverso
Objetivo: Nginx fazendo proxy para uma aplicação Node.js
Pré-requisito: Instalar Node.js e executar aplicação
# Criar aplicação Node.js simples
mkdir ~/meuapp && cd ~/meuapp
cat > app.js << EOF
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Olá do Node.js!');
}).listen(3000);
EOF
# Executar em segundo plano
node app.js &
Configuração Nginx:
server {
listen 80;
server_name api.local;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Teste:
echo "127.0.0.1 api.local" | sudo tee -a /etc/hosts
curl http://api.local
# Saída esperada: Olá do Node.js!
- Casos de Configuração Comuns
5.1 Configuração HTTPS (Let's Encrypt)
# Instalar certbot
sudo apt install certbot python3-certbot-nginx
# Obter certificado
sudo certbot --nginx -d exemplo.com
# Renovação automática
sudo crontab -e
# Adicionar: 0 12 * * * /usr/bin/certbot renew --quiet
Configuração Nginx:
server {
listen 80;
server_name exemplo.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name exemplo.com;
ssl_certificate /etc/letsencrypt/live/exemplo.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemplo.com/privkey.pem;
root /var/www/html;
index index.html;
}
5.2 Balanceamento de Carga
Cenário: 2 servidores back end (192.168.1.10:3000, 192.168.1.11:3000)
upstream backend {
server 192.168.1.10:3000 weight=1;
server 192.168.1.11:3000 weight=1;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
5.3 Suporte a PHP
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
5.4 Cache de Arquivos Estáticos
location ~* \.(jpg|jpeg|png|css|js)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
- Solução de Problemas
6.1 Erros Comuns
| Mensagem de Erro | Causa | Solução |
|---|---|---|
502 Bad Gateway |
Serviço backend não iniciado | Verificar status do serviço backend |
403 Forbidden |
Problema de permissão | chmod -R 755 /var/www/ |
404 Not Found |
Caminho de arquivo incorreto | Verificar configuração root |
413 Request Entity Too Large |
Limite de upload de arquivo | client_max_body_size 10M; |
6.2 Comandos de Diagnóstico
# Verificar configuração
sudo nginx -t
# Verificar log de erros
sudo tail -f /var/log/nginx/error.log
# Verificar log de acesso
sudo tail -f /var/log/nginx/access.log
# Reiniciar serviço
sudo systemctl restart nginx
- Otimização de Desempenho
7.1 Configuração de Otimização Básica
worker_processes auto; # Detectar automaticamente número de núcleos de CPU
worker_connections 2048; # Aumentar número de conexões
# Compressão
gzip on;
gzip_types text/plain application/json;
# Ocultar informação de versão
server_tokens off;
7.2 Timeout de Conexão
keepalive_timeout 65;
client_header_timeout 10s;
client_body_timeout 10s;
- Referência Rápida
# ========== Instalação e Inicialização ==========
sudo apt install nginx
sudo systemctl start nginx
# ========== Teste de Configuração ==========
sudo nginx -t
sudo nginx -s reload
# ========== Site Estático ==========
server {
listen 80;
root /var/www/html;
index index.html;
}
# ========== Proxy Reverso ==========
location / {
proxy_pass http://127.0.0.1:3000;
}
# ========== HTTPS ==========
sudo certbot --nginx
# ========== Visualização de Logs ==========
tail -f /var/log/nginx/error.log