精品軟體與實用教程
什麼是Nginx日誌
Nginx是一個開放原始碼的高效能HTTP和反向代理伺服器,負責處理網路上某些最大網站的負載。在管理 NGINX 網路伺服器時,您要執行的最常見任務之一就是檢查日誌檔案。
在對伺服器或應用程式問題進行故障排除時,知道如何配置和讀取日誌非常有用,因為它們提供了詳細的偵錯資訊。
Nginx用兩種類型的日誌記錄其事件記錄:訪問日誌和錯誤日誌。存取日誌記錄有關客戶端請求的信息,錯誤日誌記錄有關伺服器和應用程式問題的資訊。
配置訪問日誌
每當處理客戶請求時,Nginx都會在訪問日誌中產生一個新事件。每個事件記錄都包含一個時間戳,並包含有關客戶端和所請求資源的各種資訊。訪問日誌可以顯示訪客的位置,訪客的頁面,他們在頁面上花費的時間等。
log_format指令允許您定義記錄訊息的格式。 access_log指令啟用並設定日誌檔案的位置和使用的格式。
access_log指令最基本的語法如下:
access_log log_file log_format;
其中log_file是日誌檔案的完整路徑,log_format是日誌檔案所使用的格式。
可以在http,server或location指令區塊中啟用存取日誌。
預設情況下,主Nginx設定檔中的http指令全域啟用了存取日誌。
/etc/nginx/nginx.conf
http {
...
access_log /var/log/nginx/access.log;
...
}
為獲得更好的可維護性,建議為每個伺服器區塊設定一個單獨的存取日誌檔案。在server指令中設定的access_log指令將覆蓋在http(更高等級)指令中設定的一個。
/etc/nginx/conf.d/domain.com.conf
http {
...
access_log /var/log/nginx/access.log;
...
server {
server_name domain.com
access_log /var/log/nginx/domain.access.log;
...
}
}
如果未指定日誌格式,Nginx將使用預先定義的組合格式,如下所示:
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
若要變更日誌記錄格式,請覆寫預設設定或定義一個新設定。例如,定義一個名為 main 的新日誌記錄格式,它將以顯示X-Forwarded-For標頭的值擴展 combined 格式,在http或server中新增以下定義指令:
log_format custom '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
若要使用新格式,請在日誌檔案後指定其名稱,如下所示:
access_log /var/log/nginx/access.log custom;
雖然訪問日誌提供了非常有用的信息。它會佔用磁碟空間,並可能影響伺服器效能。如果伺服器資源不足,且網站繁忙,則可能要停用存取日誌。為此,請將access_log偽指令的值設為off:
access_log off;
配置錯誤日誌
Nginx將有關應用程式和常規伺服器錯誤的訊息寫入錯誤日誌檔案。如果您在網路應用程式中遇到錯誤,則錯誤日誌是您開始進行問題排查的第一個位置。
error_log指令啟用並設定錯誤日誌的位置和嚴重性等級。它採用以下格式,可以在http,server或location區塊中設定:
error_log log_file log_level
log_level參數設定日誌記錄等級。以下是按嚴重性從低到高列出的等級:
- debug-偵錯訊息。
- info -資訊性訊息。
- notice -公告。
- warn -警告。
- error -處理請求時發生錯誤。
- crit -關鍵問題。需要立即採取行動。
- alert -警報。必須立即採取行動。
- emerg - 緊急情況。系統處於無法使用的狀態。
每個日誌等級包括更高等級。例如,如果您將日誌等級設為warn,則Nginx也會記錄error,crit,alert和emerg訊息。
未指定log_level參數時,預設為error。
預設情況下,error_log指令在主nginx.conf檔案內的http指令中定義:
/etc/nginx/nginx.conf
http {
...
error_log /var/log/nginx/error.log;
...
}
與訪問日誌相同,建議為每個伺服器區塊設定單獨的錯誤日誌文件,該文件將覆蓋從更高層級繼承的設定。
例如,要將domain.com的錯誤日誌設定為warn,您可以使用:
http {
...
error_log /var/log/nginx/error.log;
...
server {
server_name domain.com
error_log /var/log/nginx/domain.error.log warn;
...
}
}
無論何時修改設定文件,都必須重新啟動Nginx服務,以使變更生效。