web-dev-qa-db-ja.com

nginxがログファイルにエラーを記録しない

最近、CentOS 7マシンをApacheからnginxに移動しましたが、まだ違いを解決しています。サーバーブロックの1つだけで気付いた問題の1つは、アクセスログファイルとエラーログファイルが実際にはログに記録されないため、潜在的な問題のトラブルシューティングが難しいことです。

私のサイトのサーバーブロックは次のようになります。

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

ログが保存されていない理由は何ですか?

7
Justin W. Flory

ここではNginx構文が正しいため、問題はサーバー環境に関係しています。これをデバッグするためにできることがいくつかあります。

  1. Webサーバーの動作をシミュレートします。 Webサーバーが使用するのと同じユーザーを使用してファイルへの書き込みを試みます。 Webサーバーのユーザーがnginxの場合は、rootとしてこれを試してください:su -m nginx -c 'echo "testing">>/var/www/example.com/logs/example.com_error.log'

  2. Webサーバーの動作を監視します。一時的なデバッグ手段として、Nginx設定の最上位に daemon off を追加します。次に、Nginxを停止し、strace nginx | tee nginx-output.txtで開始します。次に、フォアグラウンドで実行され、STDOUTに対して行われるすべてのシステムコールを生成します。これは、nginx-output.txtにもキャプチャされます。エラーをトリガーするために何かを行うと、デバッグログを確認しながら、Nginxを停止し、「デーモン」行を削除して、通常どおりに開始できます。問題のファイル名の言及を検索します。おそらくそこにあり、ファイルにアクセスしようとしたシステムコールからエラーが返されます。

別の可能性は、エラーログに何が表示されるかについてNginxに同意しないことです。 nginx -V | grep debugが結果を取得した場合、最後の引数をerror_logerrorからdebugに変更できます。 Nginxをリロードして、ドメインに存在しないURLにアクセスすると、大量のログが生成されます。完了したら、debugロギングをオフにします。

10
Mark Stosberg