Назад | Перейти на главную страницу

nginx не записывает ошибки в файлы журнала

Недавно я переместил свою машину с CentOS 7 с Apache на nginx, и я все еще работаю над различиями. Одна проблема, которую я заметил только для одного из моих серверных блоков, заключается в том, что файлы журнала доступа и ошибок на самом деле не регистрируются, что затрудняет устранение потенциальных проблем.

Серверный блок моего сайта выглядит следующим образом:

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

Я не уверен, почему журналы не хранятся. Я сравнил права доступа к файлам в моих серверных блоках, и все они имеют одинаковые разрешения.

-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

В чем может быть проблема, почему журналы не сохраняются?

Синтаксис Nginx здесь правильный, поэтому проблема связана с серверной средой. Вот несколько вещей, которые вы можете сделать для его отладки.

  1. Смоделируйте, что будет делать веб-сервер. Попытка записать в файл того же пользователя, что и веб-сервер. Если пользователь веб-сервера - nginx, попробуйте это как root: su -m nginx -c 'echo "testing">>/var/www/example.com/logs/example.com_error.log'

  2. Посмотрите, что делает веб-сервер. В качестве временной меры отладки на верхнем уровне конфигурации Nginx добавьте daemon off. Затем остановите Nginx и начните с него strace nginx | tee nginx-output.txt. Затем он будет работать на переднем плане и передавать все системные вызовы, которые он выполняет, в STDOUT, который также будет записан в nginx-output.txt. Сделайте что-нибудь, чтобы вызвать ошибку, а затем вы можете остановить Nginx, удалить строку «демон» и запустить его в обычном режиме, пока вы просматриваете журнал отладки. Найдите в нем упоминания о названии файла, о котором идет речь. Возможно, вы найдете его там, с ошибкой, возвращаемой системным вызовом при попытке доступа к файлу.

Другая возможность заключается в том, что вы не согласны с Nginx относительно того, что должно отображаться в журнале ошибок. Если nginx -V | grep debug получает результат, то вы можете изменить последний аргумент на error_log из error к debug. Перезагрузите Nginx и выберите URL-адрес, который не существует в домене, это должно вызвать большое количество журналов. Выключить debug регистрация, когда закончите.