O Nginx pára de funcionar de repente e não consigo encontrar o motivo

1

Eu tenho um problema complexo, que não sei depurar. No meu servidor prod eu tenho um nginx compilado da fonte com a velocidade da página. E tudo funciona bem, no entanto, às vezes, não consigo identificar um padrão, o nginx pára de funcionar, sem qualquer erro no log de erros.

error_log /usr/local/nginx/localhost-error.log;

Se eu fizer o HTOP não consigo encontrar nenhum pid relacionado com o nginx, então eu preciso começar manualmente o nginx toda vez que eu tiver esse problema.

nohup /usr/local/nginx/sbin/nginx &

Caso contrário, o nginx funciona bem. Eu não sei se é importante, mas às vezes eu recebo um ataque de força bruta contra a autenticação básica, mas eu uso falha em banir após 3 tentativas erradas.

Como posso encontrar o motivo deste problema?

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

nginx version: nginx/1.10.1
    
por user2990084 02.08.2016 / 02:42

1 resposta

1

Precisa de mais informações

É difícil dizer exatamente qual é o problema sem mais informações. Só vou jogar alguns pensamentos do seu jeito. Edite sua postagem com mais informações e talvez possamos descobrir isso.

Perguntas

  1. Como o nginx está sendo executado? Está sendo executado usando um serviço ou usando um método ad-hoc?
    • Se estiver sendo executado pelo init (upstart, systemd, etc), eles (geralmente?) registrarão algo sobre o processo que está sendo reiniciado. Se não, você pode olhar para o trabalho de inicialização e adicionar uma impressão de log para quando ele for iniciado / interrompido.
  2. Existe algo relevante em /var/log/syslog ?
  3. Salve o stdout / stderr do nginx. Algo assim. Talvez você pegue algo interessante quando isso acontecer novamente. nohup /usr/local/nginx/sbin/nginx >> /var/log/nginx.out 2>&1 &
  4. Execute um script que será registrado sempre que ele vir o nginx morrer. Você poderia então usar isso para correlacioná-lo com outros eventos no sistema.

    while true; do
        NUM_INSTANCES=$(ps -A | grep nginx | wc -l)
        if [[ "$NUM_INSTANCES" == 0 ]]; then
             echo "$(date) nginx just died" >> /var/log/syslog
        fi
        sleep 1
    done
    

    You could also replace the echo with a logger call. I've used a similar script to debug my systems. Just be sure to run this in a script file instead of a shell, so you can kill it by doing killall <scriptname>.sh.

Além disso, algumas das informações na página de depuração do nginx podem ser úteis. link

    
por 02.08.2016 / 04:06