2012-03-04 183 views
15

當nginx啓動時,它會創建大小爲0的日誌文件「access.log」。但是沒有寫入日誌。 error.log正常工作。Nginx無法寫入access.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 {}部分無法正常工作?

回答

0

您必須將用戶和組nginx綁定到您的日誌文件。

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

你可以發佈你的完整nginx.conf嗎?用pastebin例如?

編輯:在每個部分,你必須定義關鍵字像「組合」!

+0

它是WWW的數據:WWW的數據在Ubuntu – holms 2016-03-03 03:38:24

+1

如果nginx的是無法寫入它創建的日誌,chmod'ing這些文件沒有解決問題的根本原因。您可能需要查看nginx配置。 – 2016-06-30 10:20:18

+0

@holms默認,是的。 – sitilge 2016-12-14 12:35:04

15

根據您的配置,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文檔。

作爲第二個問題,當logrotate守護進程達到一定大小後,nginx日誌可能會被旋轉。當新的日誌文件被創建時,它應該被創建爲所有者,組和權限,以允許nginx工作進程寫入它。

爲nginx的這些日誌旋轉設置在/etc/logrotate.d/nginx

又見log rotation guide for ubuntu定義。

+1

logrotate不是守護進程,它是一個cronjob – Sebastian 2017-01-13 15:02:52

+1

好點@塞巴斯蒂安。在這種情況下,守護進程的定義來源於古希臘語:「仁慈或良性的自然精神」。 ;-) – Mark 2017-01-13 20:57:29

+1

logrotate的真實性:) @Mark – Sebastian 2017-01-14 21:13:43

7

我有一個類似的問題,其中訪問日誌文件沒有被寫入,但錯誤日誌文件工作正常。我的權限也很好。我把它通過強制nginx的過程來解決自身重新加載日誌文件使用

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

其中/var/run/nginx.pid是你的nginx的PID文件的路徑

+1

只要在Ubuntu上執行'sudo service nginx restart',就可以開始爲我編寫Nginx acces.log了。 (在我更正了正確用戶的權限後) – program247365 2017-06-28 00:36:38