Instalar e proteger Nginx no Ubuntu
Configure Nginx, site, UFW, HTTPS, permissões e verificações preservando o acesso remoto.
Configure Nginx, site, UFW, HTTPS, permissões e verificações preservando o acesso remoto.
Requisitos e DNS
Use Ubuntu Server atualizado e sudo. Para HTTPS, example.com deve apontar para o IP público. Publique www ou AAAA só quando funcionarem. Mantenha outra sessão SSH e acesso de recuperação; confira A/AAAA com dig.
Instalação e verificação
Instale o pacote Ubuntu e confira serviço, sintaxe e resposta HTTP local. HTTP 200 local não comprova acesso público.
sudo apt update
sudo apt upgrade
sudo apt install nginx
sudo systemctl enable --now nginx
sudo nginx -t
curl -I http://127.0.0.1
Firewall UFW
Antes de ativar UFW, permita a porta SSH real. OpenSSH no exemplo pressupõe perfil padrão; para outra porta use NÚMERO/tcp. Nginx Full abre TCP 80/443. Teste nova sessão SSH sem fechar a primeira. Confira firewall do provedor e IPv6.
sudo ufw status verbose
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status verbose
Diretório e permissões
O exemplo estático pertence ao administrador, grupo www-data, diretórios 750 e arquivos 640. Confira acesso aos diretórios pais. Aplicações dinâmicas exigem regras próprias; evite chown -R indiscriminado e 777.
sudo install -d -o "$USER" -g www-data -m 750 /var/www/example.com/public
printf '%s
' '<!doctype html><title>Example</title><h1>It works</h1>' | tee /var/www/example.com/public/index.html >/dev/null
chmod 640 /var/www/example.com/public/index.html
Bloco HTTP
Crie /etc/nginx/sites-available/example.com. Comece só com example.com; adicione www se DNS e certificado incluírem esse nome. A regra de arquivos ocultos pode afetar /.well-known/: teste o desafio HTTP e deixe o plugin Nginx gerir a exceção ou defina uma location explícita para o desafio.
server {
listen 80;
listen [::]:80;
server_name example.com;
root /var/www/example.com/public;
index index.html;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / { try_files $uri $uri/ =404; }
location ~ /\. { deny all; }
}
Ativação e teste
Crie o link se não existir, execute nginx -t antes do reload e teste o Host local. Desative o site padrão somente após confirmar que não atende conteúdo necessário. Corrija falhas antes de recarregar.
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
sudo nginx -t && sudo systemctl reload nginx
curl -I -H 'Host: example.com' http://127.0.0.1
Certificado HTTPS
Siga as instruções atuais do Certbot. Snap é suportado; /snap/bin/certbot evita conflito com links existentes. example.com deve ser acessível publicamente na porta 80. O exemplo pede certificado só para esse nome. Certbot pode alterar o bloco; confira redirecionamento, certificado e teste de renovação.
sudo snap install --classic certbot
sudo /snap/bin/certbot --nginx -d example.com
sudo nginx -t && sudo systemctl reload nginx
curl -I https://example.com
sudo /snap/bin/certbot renew --dry-run
Cabeçalhos e limites
server_tokens off oculta a versão, mas não garante segurança. Adapte cabeçalhos à aplicação e confira herança de add_header nas locations. SAMEORIGIN pode bloquear incorporação legítima. 8m é apenas exemplo. Ative HSTS só após testar HTTPS e subdomínios, inicialmente sem preload.
server_tokens off;
add_header X-Content-Type-Options nosniff always;
add_header Referrer-Policy strict-origin-when-cross-origin always;
add_header X-Frame-Options SAMEORIGIN always;
client_max_body_size 8m;
Proxy reverso opcional
Substitua a location / estática por este bloco; não duplique a mesma location. Faça o backend escutar em 127.0.0.1:8080 se não for público. Confie em cabeçalhos encaminhados apenas do proxy previsto; teste redirecionamentos, WebSockets e timeouts.
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
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;
}
Manutenção e logs
Atualize sistema e aplicação; avalie unattended-upgrades conforme sua rotina. Confira logs, espaço e nginx -t. 403 pode indicar permissões ou índice ausente; 502, backend indisponível. Teste antes de recarregar.
sudo tail -f /var/log/nginx/example.com.error.log
sudo journalctl -u nginx --since '1 hour ago'
df -h
sudo nginx -t
Verificação final
Confira SSH após UFW, DNS/IPv6, portas públicas, permissões, nginx -t, HTTPS e teste de renovação. Ajuste uploads, cabeçalhos e proxy à aplicação. Salve a configuração e monitore serviços.
Fontes oficiais
Nginx: https://nginx.org/en/docs/ ; Certbot: https://certbot.eff.org/instructions?ws=nginx&os=snap ; UFW: https://documentation.ubuntu.com/server/how-to/security/firewalls/ .
Partilhar
Qual é a sua reação?
Gosto
0
Não gosto
0
Adoro
0
Divertido
0
Irritado
0
Triste
0
Uau
0