2012-03-04 8 views
15

Po uruchomieniu nginx tworzy plik dziennika "access.log" z rozmiarem 0. Ale nie zapisano w nim żadnego logu. error.log działa poprawnie.Nginx nie może pisać w access.log

nginx.conf:

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

Plik logów jest:

-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 

Jestem całkowicie zdezorientowany. @ _ @

Czy jest to problem z pozwoleniem?

Jednak w dalszej części pliku nginx.conf w sekcji server {} działa access_log! Dlaczego sekcja http {} nie działa?

Odpowiedz

0

Musisz powiązać użytkownika i grupę nginx z plikami dziennika.

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

Czy możesz zamieścić kompletny plik nginx.conf? Na przykład z pastebinem?

EDYCJA: w każdej sekcji należy zdefiniować słowo kluczowe "połączono"!

+0

to www-data: www-data w ubuntu – holms

+1

Jeśli nginx jest nie można zapisać w logach, które utworzyły, a chmod'ing plików nie rozwiązuje głównej przyczyny problemu. Prawdopodobnie musisz przejrzeć konfigurację nginx. –

+0

@holms domyślnie, tak. – sitilge

15

W zależności od konfiguracji proces główny nginx i procesy robocze mogą być uruchamiane jako różni użytkownicy.

Aby zobaczyć użytkowników i grup do procesów nginx:

potrzeb użytkowników
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 

proces roboczy prawa zapisu do pliku dziennika.

Aby sprawdzić uprawnienia do plików z 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 

W tym przypadku dziennik dostęp jest własnością procesu roboczego nginx i ma dostęp do zapisu.

Zobacz także dokumentacje nginx http_log_module.

Jako dodatkowy problem, dzienniki nginx mogą zostać obrócone po osiągnięciu określonej wielkości przez demona logrotate. Po utworzeniu nowego pliku dziennika należy go utworzyć z właścicielem, grupą i uprawnieniami, aby umożliwić procesowi nginx do niego napisać.

te ustawienia rotacji dziennika dla nginx są zdefiniowane w /etc/logrotate.d/nginx

Zobacz także log rotation guide for ubuntu.

+1

logrotate nie jest demonem, jego cronjob – Sebastian

+1

Dobry punkt @Sebastian. W tym przypadku definicja demona pochodzi od starożytnego greka: "dobrotliwy lub łagodny duch natury". ;-) – Mark

+1

Prawdziwy charakter logrotate :) @Mark – Sebastian

7

Miałem podobny problem, gdy plik logów dostępu nie został zapisany, ale plik dziennika błędów działał poprawnie. Uprawnienia były również w porządku dla mnie. Mam go naprawić się zmuszając proces nginx przeładować pliki dziennika używając

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

gdzie /var/run/nginx.pid jest ścieżka do pliku PID nginx

+1

Po prostu zrobienie 'sudo service nginx restart' na Ubuntu sprawiło, że zacząłem znowu pisać Nginx acces.log. (po skorygowaniu uprawnień odpowiedniego użytkownika) – program247365

Powiązane problemy