2012-11-14 119 views
19

我自己在Ubuntu上編譯了nginx。 我用-c nginx.conf參數啓動我的nginx。 在我的nginx.conf文件中,我嘗試關閉錯誤日誌但失敗。如何關閉或指定nginx錯誤日誌位置?

error_log /dev/null crit; 

仍然得到了錯誤消息: nginx的:[警惕]無法打開錯誤日誌文件:打開() 「/usr/nginx/logs/error.log」 失敗(2:沒有這樣的文件或目錄)

如何關閉此日誌或更改其位置?

+0

你有沒有試圖消除'error_log'聲明(路線)? :) – Sean3z

+0

我剛剛嘗試過,只使用access_log,但仍然收到錯誤消息。 我沒有創建文件夾:/ home/dist/carrier/nginx/logs。 重新啓動nginx:nginx:[alert]無法打開錯誤日誌文件:open()「/home/dist/carrier/nginx/logs/error.log」failed(2:No such file or directory –

回答

15

禁用錯誤日誌的語法正常,但docs指出在讀取配置之前使用默認日誌文件。 (這似乎是合理的,因爲它會如何告訴你你的配置有錯誤)

嘗試使用運行nginx的用戶的正確權限手動創建此文件。或者嘗試以root身份啓動服務器。

/home/ubuntu/nginx/sbin/nginx -c /home/ubuntu/nginx/conf/nginx.conf -p /home/ubuntu/nginx 

這將預先準備與前綴目錄中的配置中指定的任何日誌路徑:

+0

這就是我所做的。編譯nginx時使用--prefix設置正確的日誌位置,並在安裝我的nginx服務時創建文件夾 –

+0

'$ sudo chmod a + w /var/log/nginx/access.log/var/log/nginx/error .log'應該有所幫助,但是從源代碼編譯nginx似乎更加可行的解決方案。 –

+0

仍然無法訪問它,我'chown''d到'www-data:www-data',但這也沒有幫助。如果文件屬於? – IIllIIll

13

我開始時nginx的e.g使用-p參數解決了這個問題。

+1

前綴解決方案適用於我:)我已將前綴目錄更改爲具有寫入權限的前綴目錄! 謝謝! – zvjerka24

+0

這根本就行不通( –

+2

)你不需要設置'-p'來讓它工作,但是確保'error_log'被設置在nginx配置的*頂層*上。 'nginx:[alert]無法打開錯誤日誌文件:open()「/usr/nginx/logs/error.log」,但[alert]不是嚴重錯誤,您的服務器無論如何都會啓動。與nginx 1.4。 – nh2

0

您無法通過指定-p前綴來解決問題;因爲這隻適用於配置文件中的指令;正如RickyA已經注意到的那樣,問題在於有一個編譯錯誤日誌,nginx甚至在它打開配置之前想要打開它。出於顯而易見的原因,更改已編譯的錯誤日誌的權限並不理想。

一種解決方法是指定的錯誤日誌中的命令行配置:

$ nginx -p . -g 'error_log error.log;' 

$ nginx -p . -g 'error_log stderr;' 

你還是會得到一個[警示]但至少它讓我在Ubuntu上啓動nginx作爲非root用戶。

+0

似乎無法在Mac上運行,fyi。 – pschuegr

1

我只是解決了這個使用這個配置參數:

./configure --prefix="$HOME/nginx" --error-log-path=/dev/stderr 

因爲我從來不使用這個nginx的一個守護進程,並始終在shell中運行它,它是有道理的,它記錄錯誤到stderr。

0

this post on the nginx.org mailing list(摘錄如下),%%ERROR_LOG_PATH%%被設置爲一個編譯選項,並在啓動時立即檢查,導致「無法打開」警報。指定前綴(使用-p)可能有助於抑制警報,但只有如果%%ERROR_LOG_PATH%%在編譯時指定爲相對路徑。

您可以檢查它是如何在當前的可執行文件指定與

nginx -V 2>&1 | grep -oE 'error-log-path=\S*'

這就是爲什麼由@邁克爾提出的解決方案適用於一些,但不是爲別人。

請看changelog:

變化nginx的0.7.53

...

*)更改:現在日誌由--error日誌路徑設置從創建很開心 。

*)功能:現在將啓動錯誤和警告輸出到 error_log和stderr。

...

中始終用來記錄在啓動 時錯誤error_log中值現在編譯(如果nginx的不能打開它發出的警告)。一旦配置文件 已被讀取 - 將改爲使用config中的error_log。

如果您編譯的nginx的error_log路徑相對於前綴 - 應該可以通過-p 開關覆蓋啓動error_log。

馬克西姆Dounin