Question Nginx ne consigne pas les erreurs dans les fichiers journaux


J'ai récemment déplacé ma machine CentOS 7 d'Apache vers nginx et je travaille toujours sur les différences. Un problème que j'ai remarqué pour un seul de mes blocs de serveur est que les fichiers de journal des accès et des erreurs ne sont pas réellement consignés, ce qui rend difficile la résolution des problèmes potentiels.

Le bloc serveur de mon site ressemble à ce qui suit:

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;
    }
}

Je ne sais pas pourquoi les journaux ne seraient pas conservés. J'ai comparé les autorisations de fichiers sur mes blocs de serveur et ils partagent tous les mêmes autorisations.

-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

Quel pourrait être le problème avec pourquoi les journaux ne sont pas stockés?


6
2017-11-11 23:04


origine


L'utilisateur nginx a-t-il accès au répertoire /var/www/example.com/logs/? - Aaron Mason
@AaronMason Le répertoire appartient à root (utilisateur et groupe), mais il s'agit exactement des mêmes autorisations que les autres blocs serveur de la machine capables d'écrire dans les journaux. - Justin W. Flory


Réponses:


La syntaxe Nginx est correcte ici, donc le problème concerne l'environnement du serveur. Voici certaines choses que vous pouvez faire pour le déboguer.

  1. Simulez ce que le serveur Web ferait. Essayez d’écrire dans le fichier en utilisant le même utilisateur que le serveur Web. Si l'utilisateur du serveur Web est nginx, essayez ceci en tant que root: su -m nginx -c 'echo "testing">>/var/www/example.com/logs/example.com_error.log'

  2. Regardez ce que fait le serveur Web. En tant que mesure de débogage temporaire, au niveau supérieur de votre configuration Nginx, ajoutez daemon off. Puis arrêtez Nginx et commencez avec strace nginx | tee nginx-output.txt. Il s'exécutera ensuite au premier plan et générera tous les appels système effectués vers STDOUT, qui seront également capturés dans nginx-output.txt. Faites quelque chose pour déclencher l'erreur, puis vous pourrez arrêter Nginx, supprimer la ligne "démon" et la démarrer normalement pendant que vous consultez le journal de débogage. Recherchez dans celui-ci les mentions du nom du fichier en question. Vous le trouverez peut-être ici, avec une erreur renvoyée par l'appel système tentant d'accéder au fichier.

Une autre possibilité est que vous ne soyez pas d'accord avec Nginx sur ce qui devrait apparaître dans le journal des erreurs. Si nginx -V | grep debug obtient un résultat, alors vous pouvez changer le dernier argument en error_log de error à debug. Rechargez Nginx et appuyez sur une URL qui n'existe pas sur le domaine. Cela devrait générer beaucoup de journalisation. Éteindre debug se connecter lorsque vous avez terminé.


9
2017-12-11 15:54