web-dev-qa-db-ja.com

Nginxはaccess.logに書き込むことができません

Nginxが起動すると、サイズが0のログファイル「access.log」が作成されます。ただし、ログは書き込まれません。 error.logは正常に動作します。

nginx.conf:

http {
    access_log /usr/local/webserver/nginx/logs/access.log combined;
    ....
}

ログファイルは次のとおりです。

-rw-r--r--  1 root root    0 Mar  4 00:54 access.log
-rw-r--r--  1 root root 3903 Mar  4 00:54 error.log

私は完全に混乱しています。 @ _ @

許可の問題ですか?

ただし、nginx.confの後半のサーバーの{}セクションでは、access_logが機能します。 http {}セクションが機能しないのはなぜですか?

21
Seth

構成によっては、nginxマスタープロセスとワーカープロセスが異なるユーザーとして実行される可能性があります。

Nginxプロセスのユーザーとグループを表示するには:

ps -eo "%U %G %a" | grep nginx

root     root     nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www-data www-data nginx: worker process

ワーカープロセスユーザーには、ログファイルへの書き込み権限が必要です。

Access.logのファイル権限を確認するには:

ls -l /var/log/nginx/access.log
-rw-r----- 1 www-data www-data 0 Apr 29  2012 /var/log/nginx/access.log

この場合、アクセスログはnginxワーカープロセスが所有し、書き込みアクセス権を持っています。

Nginx http_log_module docsも参照してください。

二次的な問題として、loginate cronjobによって特定のサイズに達すると、nginxログがローテーションされる場合があります。新しいログファイルを作成するときは、nginxワーカープロセスがファイルに書き込むことができるように、所有者、グループ、およびアクセス許可を使用して作成する必要があります。

Nginxのこれらのログローテーション設定は、/ etc/logrotate.d/nginxで定義されています

buntuのログローテーションガイド も参照してください。

20
Mark

アクセスログファイルが書き込まれないという同様の問題がありましたが、エラーログファイルは正常に機能していました。許可も私にとっては問題ありませんでした。私はそれを使ってnginxプロセスに強制的にログファイルをリロードさせることでそれを修正しました

kill -USR1 `cat /var/run/nginx.pid`

どこ /var/run/nginx.pidはnginx PIDファイルへのパスです

8
Animesh Jain

ユーザーとグループのnginxをログファイルにバインドする必要があります。

chown nginx:nginx access.log
chown nginx:nginx error.log

完全なnginx.confを投稿できますか?たとえばPastebinを使用しますか?

編集:すべてのセクションで、「結合」のようなキーワードを定義する必要があります!

3
daemonTutorials