Tutoriais de VPS
Como corrigir erros de configuração do Nginx no VPS (2026): nginx -t, reload failed, proxy reverso e certificados
No VPS, após alterar a configuração do Nginx, o reload falha, o site retorna 404/502 ou o HTTPS não entra em vigor. As causas comuns incluem erros de sintaxe na configuração, incompatibilidade de server_name, ordem de carregamento dos arquivos include, uso incorreto de root/alias, sintaxe incorreta de proxy_pass, caminhos de certificado errados ou portas ocupadas. Este artigo diagnostica na ordem de nginx -t, systemctl, error.log, configuração do site e rollback.

Como corrigir erros de configuração do Nginx no VPS (2026): nginx -t, reload failed, proxy reverso e certificados
Quando a configuração do Nginx dá erro, o maior medo é executar restart diretamente e derrubar o site inteiro. O correto é primeiro verificar a sintaxe com nginx -t e depois fazer reload; se o reload falhar, veja primeiro o número da linha do erro, os arquivos include e os logs, e não fique alterando um monte de configurações de uma vez.
A documentação oficial do Nginx explica: no reload, o processo master primeiro verifica a nova configuração e só inicia novos workers se ela for válida; se falhar, ele reverte e continua usando a configuração antiga. É por isso que você precisa criar o hábito de nginx -t antes de publicar.
sudo systemctl status nginx --no-pager
sudo nginx -t
Se nginx -t der erro, normalmente ele informa o arquivo e o número da linha, por exemplo:
nginx: [emerg] invalid number of arguments in "proxy_pass" directive in /etc/nginx/sites-enabled/app.conf:18
Nesse momento, não adivinhe: abra diretamente o arquivo e a linha correspondentes.
Fluxo de publicação recomendado:
sudo nginx -t
sudo systemctl reload nginx
Não é recomendado começar com:
sudo systemctl restart nginx
Quando reload falha, os workers antigos geralmente continuam ativos e o serviço em produção pode não ser interrompido; quando restart falha, pode simplesmente não haver nenhum processo do Nginx atendendo.
Veja os logs:
sudo journalctl -u nginx -n 100 --no-pager
sudo tail -n 100 /var/log/nginx/error.log
Estrutura comum no Ubuntu / Debian:
/etc/nginx/nginx.conf
/etc/nginx/conf.d/*.conf
/etc/nginx/sites-available/
/etc/nginx/sites-enabled/
Liste os sites habilitados:
ls -l /etc/nginx/sites-enabled/
Problemas comuns:
- Há um link simbólico quebrado em
sites-enabled; - O mesmo
server_nameestá escrito várias vezes; - Vários sites escutam na mesma porta, mas não há site padrão;
- A ordem de carregamento dos nomes de arquivo faz a configuração padrão corresponder primeiro.
Você pode usar:
sudo nginx -T | less
Para ver a configuração completa como o Nginx realmente a carrega.
Se o navegador abre o site padrão, um site antigo ou um 404, verifique primeiro:
server {
listen 80;
server_name example.com www.example.com;
}
Também confirme que o DNS aponta para o VPS atual:
dig +short example.com
Se você também tem IPv6, não esqueça o registro AAAA. Às vezes o registro A está correto, mas o AAAA ainda aponta para a máquina antiga, causando problemas de acesso para alguns usuários.
Um erro comum em sites estáticos é entender errado como os caminhos de root / alias são concatenados.
Para cenários simples, use root:
location / {
root /var/www/site;
try_files $uri $uri/ =404;
}
alias é mais adequado para mapear um prefixo de URL para um diretório completamente diferente:
location /uploads/ {
alias /data/uploads/;
}
A barra final em alias é importante; se escrita errada, causa 404 ou concatenação de caminho anormal.
Configuração comum de proxy reverso:
location / {
proxy_pass http://127.0.0.1:3000;
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;
}
Diagnostique o backend:
curl -I http://127.0.0.1:3000
sudo ss -lntup | grep 3000
Se o backend não estiver escutando, o Nginx retornará 502 por mais correta que esteja a configuração.
Para um diagnóstico mais detalhado de 502/504, veja:
Erros comuns na configuração de certificados:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
Verifique se os arquivos existem:
sudo ls -l /etc/letsencrypt/live/example.com/
Verifique a renovação:
sudo certbot renew --dry-run
Caminho de certificado errado, domínio incompatível ou porta 80 bloqueada podem fazer a configuração HTTPS não entrar em vigor ou o reload falhar.
Confirme se o Nginx está escutando:
sudo ss -lntup | egrep ':80|:443'
Se a porta estiver ocupada pelo Apache, Caddy ou outro Nginx, os logs normalmente mostram bind() to 0.0.0.0:80 failed.
Verifique o UFW:
sudo ufw status verbose
Libere HTTP/HTTPS:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Verifique também o security group do provedor de nuvem; caso contrário, mesmo que a máquina local libere, o acesso externo pode continuar falhando.
Faça backup antes de cada alteração de configuração:
sudo cp /etc/nginx/sites-available/app.conf /etc/nginx/sites-available/app.conf.bak.$(date +%F-%H%M)
Ordem de publicação:
sudo nginx -t
sudo systemctl reload nginx
curl -I https://example.com
Se falhar, faça rollback:
sudo cp /etc/nginx/sites-available/app.conf.bak.时间戳 /etc/nginx/sites-available/app.conf
sudo nginx -t
sudo systemctl reload nginx
Não fique adivinhando e alterando na máquina de produção. Mantenha cada alteração e comando de rollback no histórico do shell ou em um registro de mudanças; o diagnóstico futuro será muito mais rápido.
sudo nginx -tpara ver o arquivo e o número da linha;journalctl -u nginx -n 100para ver os erros do systemd;tail /var/log/nginx/error.logpara ver os erros de execução;nginx -Tpara ver a configuração final carregada;- Verifique os links simbólicos de
sites-enabled; - Verifique
server_namee o DNS; - Verifique
root/aliasouproxy_pass; - Verifique os caminhos dos certificados e o certbot;
- Verifique a escuta em 80/443, o firewall e o security group;
- Se necessário, faça rollback a partir do backup.
Leitura complementar:
O princípio central para erros de configuração do Nginx é: primeiro nginx -t, depois reload, não restart diretamente. Para erros de sintaxe, veja o número da linha; para erros de execução, veja error.log; para problemas de proxy reverso, veja a escuta do backend; para problemas de HTTPS, veja os caminhos dos certificados e a acessibilidade das portas 80/443. Fixar o processo de publicação e rollback é mais confiável do que adivinhar a configuração na hora.