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 {}セクションが機能しないのはなぜですか?
構成によっては、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のログローテーションガイド も参照してください。
アクセスログファイルが書き込まれないという同様の問題がありましたが、エラーログファイルは正常に機能していました。許可も私にとっては問題ありませんでした。私はそれを使ってnginxプロセスに強制的にログファイルをリロードさせることでそれを修正しました
kill -USR1 `cat /var/run/nginx.pid`
どこ /var/run/nginx.pid
はnginx PIDファイルへのパスです
ユーザーとグループのnginxをログファイルにバインドする必要があります。
chown nginx:nginx access.log
chown nginx:nginx error.log
完全なnginx.confを投稿できますか?たとえばPastebinを使用しますか?
編集:すべてのセクションで、「結合」のようなキーワードを定義する必要があります!