nginx não registra erros nos arquivos de log

6

Recentemente, mudei minha máquina do CentOS 7 do Apache para o nginx, e ainda estou trabalhando nas diferenças. Um problema que notei em apenas um dos meus bloqueios de servidor é que os arquivos de log de acesso e erro não estão sendo registrados, dificultando a solução de possíveis problemas.

O bloco de servidor do meu site é semelhante ao seguinte:

server {
    listen       80;
    server_name  example.com;
    root         /var/www/example.com/public_html;
    index        index.php;
    access_log   /var/www/example.com/logs/example.com_access.log;
    error_log    /var/www/example.com/logs/example.com_error.log error;

    location / {
        index index.php index.html;
    }

    location /reports {
        autoindex on;
    }

    location ~ \.php$ {
        try_files          $uri =404;
        fastcgi_pass       unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_param      SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include            fastcgi_params;
    }

    error_page 404 /var/www/html/404.html;
    error_page 500 502 503 504 /var/www/html/50x.html;

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }

    location /robots.txt {
        #access_log off;
        #log_not_found off;
    }

    location ~ /\.ht {
        deny all;
    }
}

Não sei por que os logs não serão mantidos. Eu comparei as permissões de arquivo nos meus blocos de servidores e todos compartilham as mesmas permissões.

-rw-r--r--. 1 nginx root    0 Nov  7 02:54 example.com_access.log
-rw-r--r--. 1 nginx root    0 Nov  7 02:54 example.com_error.log

Qual poderia ser o problema de por que os logs não estão sendo armazenados?

    
por Justin W. Flory 12.11.2015 / 00:04

1 resposta

9

A sintaxe Nginx está correta aqui, portanto, o problema tem a ver com o ambiente do servidor. Aqui estão algumas coisas que você pode fazer para depurá-lo.

  1. Simule o que o servidor da Web faria. Tente gravar no arquivo usando o mesmo usuário que o servidor da Web usaria. Se o usuário do servidor da web for nginx, tente isto como root: su -m nginx -c 'echo "testing">>/var/www/example.com/logs/example.com_error.log'

  2. Veja o que o servidor da Web está fazendo. Como uma medida temporária de depuração, no nível superior de sua configuração do Nginx, adicione daemon off . Em seguida, pare o Nginx e comece com strace nginx | tee nginx-output.txt . Em seguida, ele será executado em primeiro plano e emitirá todas as chamadas do sistema feitas para o STDOUT, que também será capturado no nginx-output.txt. Faça algo para acionar o erro e, em seguida, você pode parar o Nginx, remover a linha "daemon" e iniciá-la normalmente enquanto revisa o log de depuração. Procure nele as menções do nome do arquivo em questão. Talvez você o encontre lá, com um erro retornado da chamada do sistema tentando acessar o arquivo.

Outra possibilidade é que você discorda do Nginx sobre o que deveria estar aparecendo no log de erros. Se nginx -V | grep debug obtiver um resultado, você poderá alterar o último argumento para error_log de error para debug . Recarregue o Nginx e acerte um URL que não existe no domínio, isso deve gerar muitos registros. Desative debug logging quando terminar.

    
por 11.12.2015 / 16:54