Controle de Serviço Nginx: Um Guia Prático para Comandos Comuns de Gerenciamento
Comandos práticos de controle de serviço Nginx para iniciar, parar, recarregar, reiniciar, verificar status, testar configuração, logs e sinais diretos.
Controle de Serviço Nginx: Um Guia Prático para Comandos Comuns de Gerenciamento
O controle de serviço do Nginx não é complicado, mas a diferença entre reload, restart, stop e nginx -s quit importa quando usuários reais estão conectados. O hábito mais seguro é simples: teste a configuração primeiro, recarregue quando um recarregamento gracioso for suficiente e reinicie apenas quando você realmente precisar de um ciclo completo de serviço.
A maioria dos servidores Linux usa systemd agora, então systemctl é o comando que você usará com mais frequência. Distribuições mais antigas ainda podem usar o comando service. O binário do Nginx também aceita sinais diretos, que são úteis quando você precisa recarregar a configuração ou reabrir logs sem passar pelo gerenciador de serviços.
Entendendo o Gerenciamento de Serviço do Nginx
Os comandos de gerenciamento de serviço do Nginx são tipicamente executados usando utilitários do sistema como systemctl (para sistemas que usam systemd, comum em distribuições Linux modernas) ou service (para sistemas init mais antigos). O comando específico pode variar ligeiramente dependendo do seu sistema operacional e sua estrutura de gerenciamento de serviços.
Iniciando o Nginx
Para iniciar o servidor web Nginx, você usará o comando start. Este comando inicia o processo Nginx, tornando-o pronto para aceitar conexões de entrada.
Usando
systemctl(Recomendado para sistemas modernos):sudo systemctl start nginxUsando
service(Para sistemas mais antigos):sudo service nginx start
Quando o Nginx inicia, ele lê seus arquivos de configuração e começa a escutar nas portas especificadas em sua configuração (comumente porta 80 para HTTP e 443 para HTTPS).
Parando o Nginx
Para desligar graciosamente o servidor web Nginx, use o comando stop. Este comando sinaliza ao Nginx para parar de aceitar novas conexões e permite que as conexões existentes sejam concluídas antes de sair.
Usando
systemctl:sudo systemctl stop nginxUsando
service:sudo service nginx stop
Em sistemas systemd, stop pede ao gerenciador de serviços para parar o Nginx. Se as requisições ativas têm tempo para terminar depende da configuração do serviço e do comportamento do sinal. Se você precisa especificamente de um desligamento gracioso no nível do Nginx, sudo nginx -s quit é o comando direto a saber.
Reiniciando o Nginx
O comando restart é uma combinação de stop seguido por start. É frequentemente usado após fazer mudanças significativas na configuração que exigem um ciclo completo de serviço para ter efeito. Use este comando com cautela, pois ele interrompe brevemente o serviço.
Usando
systemctl:sudo systemctl restart nginxUsando
service:sudo service nginx restart
Este é um comando comum para aplicar certos tipos de atualizações de configuração.
Recarregando o Nginx
O comando reload é um dos comandos mais úteis do Nginx para aplicar mudanças de configuração sem interromper nenhuma conexão ativa. O Nginx reinicia graciosamente seus processos de trabalho, permitindo que eles assumam a nova configuração. Este é o método preferido para a maioria das atualizações de configuração.
Usando
systemctl:sudo systemctl reload nginxUsando
service:sudo service nginx reload
Dica: Sempre tente usar reload em vez de restart quando possível para minimizar o tempo de inatividade.
Se um recarregamento falhar porque a nova configuração é inválida, os processos de trabalho antigos geralmente continuam rodando com a configuração antiga. Essa é uma razão pela qual o recarregamento é mais seguro que a reinicialização durante edições de rotina. Ainda assim, sempre execute nginx -t primeiro para não depender do comportamento de falha durante um incidente.
Verificando o Status do Nginx
Para verificar se o Nginx está rodando, se falhou ou para entender seu estado atual, use o comando status.
Usando
systemctl:sudo systemctl status nginxUsando
service:sudo service nginx status
Este comando fornece informações valiosas, incluindo se o serviço está ativo, seu ID de processo (PID) e entradas de log recentes, que podem ser úteis para diagnósticos rápidos.
Testando a Configuração do Nginx
Antes de aplicar mudanças de configuração, especialmente após um restart ou reload, é crucial testar seus arquivos de configuração quanto a erros de sintaxe. O Nginx fornece um comando embutido para este propósito.
Testar Sintaxe da Configuração
Este comando verifica toda a configuração do Nginx quanto a erros de sintaxe sem realmente aplicar as mudanças. Ele relatará quaisquer problemas que encontrar.
nginx -t
Exemplo de Saída (Sucesso):
test is successful
nginx: configuration file /etc/nginx/nginx.conf test is successful
Exemplo de Saída (Erro):
nginx: [emerg] unknown directive "server_name " in /etc/nginx/sites-available/default:10
nginx: configuration file /etc/nginx/nginx.conf test failed
Aviso: Sempre execute nginx -t após modificar qualquer arquivo de configuração e antes de recarregar ou reiniciar o Nginx. Este simples passo pode prevenir tempo de inatividade inesperado causado por erros de sintaxe.
Se sua configuração usa um arquivo de configuração principal personalizado, passe-o explicitamente:
sudo nginx -t -c /path/to/nginx.conf
Para ver a configuração completa carregada, incluindo arquivos incluídos, use:
sudo nginx -T
Tenha cuidado com nginx -T em terminais compartilhados ou tickets, pois pode imprimir caminhos sensíveis, nomes de upstreams ou comentários de arquivos de configuração.
Habilitando o Nginx na Inicialização
Iniciar o Nginx uma vez é diferente de habilitá-lo após a reinicialização. Em sistemas systemd, use:
sudo systemctl enable nginx
Para habilitá-lo e iniciá-lo imediatamente:
sudo systemctl enable --now nginx
Para impedir que ele inicie automaticamente na inicialização:
sudo systemctl disable nginx
Isso é útil após uma instalação de pacote. Já vi muitos servidores onde o Nginx foi iniciado manualmente durante a configuração, funcionou perfeitamente por semanas e depois ficou inativo após uma reinicialização de manutenção porque ninguém habilitou o serviço.
Verificando Logs Após Ações de Serviço
Após uma falha ao iniciar ou recarregar, não fique olhando para o prompt de comando. Pergunte ao systemd e ao Nginx o que aconteceu:
sudo journalctl -u nginx -n 100 --no-pager
E verifique o log de erros do Nginx:
sudo tail -n 100 /var/log/nginx/error.log
Mensagens comuns são diretas o suficiente quando você sabe o que procurar:
bind() to 0.0.0.0:80 failed: outro processo pode já estar usando a porta, ou as permissões estão erradas.unknown directive: um erro de digitação, módulo faltando ou diretiva usada na compilação errada do Nginx.host not found in upstream: DNS falhou ou o nome do upstream está errado.permission denied: Nginx não pode ler um arquivo, escrever logs ou acessar uma chave de certificado.
Para conflitos de porta, isso geralmente dá a resposta:
sudo ss -ltnp | grep -E ':80|:443'
Se outro servidor web estiver escutando na mesma porta, decida qual serviço deve possuí-la. Não mate o processo a menos que saiba por que ele está lá.
Recarregar Versus Reiniciar em Situações Reais
Use reload após a maioria das edições de configuração: novos blocos de servidor, cabeçalhos de proxy alterados, valores de timeout atualizados, novos redirecionamentos, formatos de log alterados ou locais de arquivos estáticos ajustados. O Nginx inicia novos trabalhadores com a nova configuração e deixa os trabalhadores antigos terminarem o trabalho existente.
Use restart quando o próprio serviço precisar de um início limpo. Exemplos incluem limites do systemd alterados, ambiente herdado pelo serviço alterado, atualizações de pacotes onde o binário mudou ou situações onde o processo mestre não está saudável. Reiniciar pode interromper brevemente o tráfego, então faça isso intencionalmente.
Use stop quando você quiser o serviço parado. Isso parece óbvio, mas é importante durante a manutenção. Se um balanceador de carga ainda enviar tráfego para um servidor depois que você parar o Nginx, os usuários verão falhas. Drene o servidor do balanceador de carga primeiro quando possível.
Use nginx -s reopen após a rotação manual de logs se seu processo de rotação já não sinalizar o Nginx. Sem reabrir, o Nginx pode continuar escrevendo no antigo manipulador de arquivo mesmo depois que o arquivo de log visível foi movido.
Nomes de Pacotes e Nomes de Serviços
A maioria das distribuições chama o serviço de nginx, mas nem todo ambiente é idêntico. Se systemctl status nginx disser que a unidade não existe, liste unidades correspondentes:
systemctl list-unit-files | grep -i nginx
Em alguns hosts, o Nginx pode estar instalado a partir de um pacote personalizado, um contêiner, um painel de controle ou uma pilha empacotada. Nesses casos, os comandos systemd podem não controlar a instância que você está realmente usando. Confirme o binário e o caminho da configuração:
which nginx
nginx -V
nginx -V imprime opções de compilação e caminhos de módulos. Também é útil quando uma diretiva de configuração funciona em um servidor, mas falha em outro porque o módulo está faltando.
Se o Nginx roda no Docker, os comandos de serviço no host podem ser irrelevantes. Você inspecionaria e recarregaria através do fluxo de trabalho do contêiner:
docker ps
docker exec <container> nginx -t
docker exec <container> nginx -s reload
Use a ferramenta de orquestração que possui o processo. Para Kubernetes, isso geralmente significa alterar um ConfigMap ou recurso Ingress e deixar o controlador recarregar, não acessar um pod para uma correção permanente.
Algumas Sequências de Comandos para Dias de Incidente
Quando uma mudança de configuração quebra o recarregamento:
sudo nginx -t
sudo journalctl -u nginx -n 50 --no-pager
sudo tail -n 50 /var/log/nginx/error.log
Corrija o primeiro erro de sintaxe ou arquivo mostrado por nginx -t, então teste novamente. Não reinicie o serviço para "ver se funciona" quando o teste de sintaxe já diz que não vai.
Quando o site está fora do ar e você não tem certeza se o Nginx está rodando:
sudo systemctl status nginx
sudo ss -ltnp | grep -E ':80|:443'
curl -I http://127.0.0.1/
Isso separa três perguntas: o serviço está ativo, algo está escutando nas portas esperadas e uma requisição HTTP local funciona? Se o curl local funciona, mas o site público falha, olhe para DNS, regras de firewall, grupos de segurança na nuvem, balanceadores de carga ou TLS.
Quando HTTPS falha após a renovação do certificado:
sudo nginx -t
sudo systemctl reload nginx
sudo journalctl -u nginx -n 50 --no-pager
Erros de caminho de certificado geralmente aparecem no teste de sintaxe ou no log de erros. Problemas de permissão também são comuns se a chave do certificado é legível pelo root, mas o usuário do trabalhador Nginx não pode acessar o diretório necessário. Tenha cuidado com permissões em chaves privadas; não as torne legíveis mundialmente apenas para silenciar um erro.
Quando os logs param de atualizar após a rotação:
sudo nginx -s reopen
sudo ls -l /var/log/nginx/
sudo tail -f /var/log/nginx/access.log
Muitos pacotes logrotate já lidam com isso. O comando ainda é útil quando você roda logs manualmente ou executa uma configuração de log personalizada.
O Que Não Fazer
Não execute kill -9 contra processos de trabalho do Nginx como um método normal de gerenciamento. Isso não dá chance ao processo de terminar o trabalho ou limpar. Use systemctl stop, systemctl restart ou os comandos de sinal do Nginx, a menos que você esteja lidando com um processo verdadeiramente travado e entenda os efeitos colaterais.
Não edite arquivos em sites-available e assuma que estão ativos. Em layouts estilo Debian, um site geralmente precisa de um link simbólico em sites-enabled. Em outras distribuições, o layout pode usar conf.d. nginx -T é a maneira mais rápida de ver o que o Nginx está realmente carregando.
Não esqueça o sudo. Executar nginx -t como um usuário não privilegiado pode falhar porque não pode ler chaves de certificado ou arquivos incluídos, mesmo que o próprio serviço possa. Teste da mesma forma que o serviço rodará em produção:
sudo nginx -t
Não use restart como reflexo. Restart tem seu lugar, mas é mais pesado que reload. Durante uma janela de manutenção tranquila, isso pode não importar. Durante um evento de vendas movimentado, importa.
Gerenciando Processos Nginx (Avançado)
Enquanto systemctl e service são as ferramentas principais para gerenciar o serviço Nginx como um todo, você também pode interagir diretamente com o processo mestre do Nginx usando o comando nginx com sinais específicos.
Enviando Sinais para o Nginx
O Nginx usa um processo mestre que gerencia processos de trabalho. Você pode enviar sinais para o processo mestre para influenciar seu comportamento. A maneira mais comum de fazer isso é encontrando o PID do processo mestre e usando o comando kill, ou mais convenientemente, usando nginx -s <sinal>.
Recarregar Configuração: Similar ao comando
reloadacima.sudo nginx -s reloadDesligamento Gracioso: Similar ao comando
stop.sudo nginx -s quitDesligamento Rápido: Isso matará todos os processos de trabalho imediatamente sem esperar que as requisições atuais sejam atendidas.
sudo nginx -s stopReabrir Arquivos de Log: Útil se você está rotacionando arquivos de log manualmente ou se os logs estão sendo escritos em um local diferente.
sudo nginx -s reopen
Para usar nginx -s <sinal>, o Nginx precisa saber onde seu arquivo PID do processo mestre está localizado. Por padrão, isso é frequentemente /var/run/nginx.pid ou /run/nginx.pid. Você pode especificar um local diferente do arquivo PID usando a opção -c se necessário, mas isso raramente é necessário para instalações padrão.
Um Fluxo de Trabalho Diário Seguro
Para edições normais de configuração, use este fluxo de trabalho:
sudo nginx -t
sudo systemctl reload nginx
sudo systemctl status nginx
Em seguida, verifique o site a partir de um cliente:
curl -I https://example.com/
Se o serviço falhar ao iniciar, não execute restart repetidamente. Leia a saída de status e os logs, corrija o primeiro erro real, teste novamente e então inicie ou recarregue. Os comandos de controle de serviço do Nginx são pequenos, mas usados na ordem correta, eles impedem que uma edição de configuração ruim se torne um tempo de inatividade evitável.