2012-03-04 15 views
15

All'avvio di nginx, crea il file di registro "access.log" con dimensione 0. Ma non ci sono scritti in esso. error.log funziona bene.Nginx non può scrivere in access.log

nginx.conf:

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

Il file di log è:

-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 

Sono totalmente confuso. @ _ @

È un problema di autorizzazione?

Tuttavia, nella parte successiva di nginx.conf, nella sezione server {}, access_log funziona! Perché la sezione http {} non funziona?

risposta

0

È necessario associare l'utente e il gruppo nginx ai file di registro.

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

Puoi pubblicare il tuo nginx.conf completo? Ad esempio con pastebin?

MODIFICA: in ogni sezione è necessario definire la parola chiave come "combinata"!

+0

E 'www-data: www-data in Ubuntu – holms

+1

Se nginx è non è in grado di scrivere nei registri creati in primo luogo, poiché chmoding dei file non sta affrontando la causa principale del problema. Probabilmente hai bisogno di guardare la configurazione di nginx. –

+0

@holms per impostazione predefinita, sì. – sitilge

15

A seconda della configurazione, il processo master nginx ei processi di lavoro possono essere eseguiti come utenti diversi.

Per visualizzare utenti e gruppi per i processi di 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 

il processo di lavoro esigenze degli utenti scrittura per il file di log.

Per visualizzare i permessi dei file di 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 

In questo caso, log di accesso è di proprietà del processo di lavoro nginx e ha accesso in scrittura.

Vedere anche nginx http_log_module doc.

Come un problema secondario, i registri nginx possono essere ruotati quando raggiungono una determinata dimensione dal daemon logrotate. Quando viene creato il nuovo file di registro, deve essere creato con il proprietario, il gruppo e le autorizzazioni per consentire al processo di lavoro di nginx di scrivere su di esso.

Queste impostazioni di rotazione registro per nginx sono definiti in /etc/logrotate.d/nginx

Vedi anche log rotation guide for ubuntu.

+1

logrotate non è un demone, è un cronjob – Sebastian

+1

Buon punto @Sebastian. In questo caso la definizione di demone deriva dal greco antico: "uno spirito di natura benevolo o benigno". ;-) – Mark

+1

vera natura di logrotate :) @Mark – Sebastian

7

Ho avuto un problema simile a quello in cui il file di log di accesso non veniva scritto, ma il file di log degli errori funzionava correttamente. Anche le autorizzazioni andavano bene per me. Ho preso a fissarsi forzando il processo nginx per ricaricare i file di log utilizzando

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

dove /var/run/nginx.pid è il percorso del file PID nginx

+1

Solo facendo 'sudo servizio nginx restart' su Ubuntu ha fatto iniziare a scrivere nuovamente Nginx acces.log per me. (dopo aver corretto le autorizzazioni dell'utente giusto) – program247365