編輯搜圖
Nginx是一個開放源代碼的高性能HTTP和反向代理服務(wù)器,負責處理Internet上某些最大站點的負載。在管理NGINX網(wǎng)絡(luò)服務(wù)器時,你要執(zhí)行的最常見任務(wù)之一就是檢查日志文件。
在對服務(wù)器或應(yīng)用程序問題進行故障排除時,知道如何配置和讀取日志非常有用,因為它們提供了詳細的調(diào)試信息。
Nginx用兩種類型的日志記錄其事件:訪問日志和錯誤日志。訪問日志記錄有關(guān)客戶端請求的信息,錯誤日志記錄有關(guān)服務(wù)器和應(yīng)用程序問題的信息。
本教程概述了如何配置和讀取Nginx訪問和錯誤日志。配置Nginx訪問日志的格式與位置,配置錯誤日志格式與位置,默認的日志文件所在位置,讀取和理解Nginx日志文件每個字段。
配置Nginx訪問日志
每當處理客戶請求時,Nginx都會在訪問日志中生成一個新記錄。每個事件記錄都包含一個時間戳,并包含有關(guān)客戶端和所請求資源的各種信息。訪問日志可以顯示訪問者的位置,訪問者的訪問的頁面等。
log_format指令允許你定義記錄日志的格式。access_log指令啟用并設(shè)置日志文件的位置和使用的格式。
access_log指令的最基本語法如下:
access_log log_file log_format;1.
其中l(wèi)og_file是日志文件的完整路徑,log_format是日志文件使用的格式??梢栽趆ttp,server或location指令的上下文中啟用訪問日志。
默認情況下,Nginx主配置文件中的http指令配置了全局訪問日志格式。
http { ... access_log /var/log/nginx/access.log; ...}1.2.3.4.5.
/etc/nginx/nginx.conf
為獲得更好的可維護性,建議為每個服務(wù)器設(shè)置一個單獨的訪問日志文件。在server指令中設(shè)置的access_log指令將覆蓋在http指令中設(shè)置的access_log。
http { ... access_log /var/log/nginx/access.log; ... server { server_name domain.com access_log /var/log/nginx/domain.access.log; ... }}1.2.3.4.5.6.7.8.9.10.
/etc/nginx/conf.d/domain.com.conf
如果未指定日志格式,Nginx將使用預(yù)定義的combined組合格式,如下所示:
log_format combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';1.2.3.
要更改日志記錄格式,請覆蓋默認設(shè)置或定義一個新設(shè)置。例如,定義一個名為 main的新日志記錄格式,它將用添加X-Forwarded-Forheader的值來擴展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"';1.2.3.
要使用新日志格式,請在日志文件后指定其名稱,如下所示:
access_log /var/log/nginx/access.log custom;1.
雖然訪問日志提供了非常有用的信息。但它會占用磁盤空間,并可能影響服務(wù)器性能。如果服務(wù)器資源不足,并且網(wǎng)站繁忙,則可能要禁用訪問日志。為此,請將access_log偽指令的值設(shè)置為off。理論上你不會出現(xiàn)這種情況,Nginx會自動刪除前期的日志文件:
access_log off;
配置錯誤日志
Nginx將應(yīng)用程序和常規(guī)服務(wù)器錯誤的消息寫入錯誤日志文件。如果你在Web應(yīng)用程序中遇到錯誤,則錯誤日志是你開始進行排查問題的第一個位置。
error_log指令啟用并設(shè)置錯誤日志的位置和嚴重性級別。它采用以下格式,可以在http,server或location上下文中進行設(shè)置:
error_log log_file log_level1.
log_level參數(shù)設(shè)置日志記錄級別。以下是按嚴重性從低到高列出的級別:
-
debug-調(diào)試消息。
-
info -信息性消息。
-
notice -公告。
-
warn - 警告。
-
error -處理請求時出錯。
-
crit -關(guān)鍵問題。需要立即采取行動。
-
alert -警報。必須立即采取行動。
-
emerg - 緊急情況。系統(tǒng)處于無法使用的狀態(tài)。
每個日志級別包括更高級別。例如,如果你將日志級別設(shè)置為warn,則Nginx還將記錄error,crit,alert和emerg消息。未指定log_level參數(shù)時,默認為error。
默認情況下,error_log指令在主nginx.conf文件內(nèi)的http指令上下文中定義:
http { ... error_log /var/log/nginx/error.log; ...}1.2.3.4.5.
/etc/nginx/nginx.conf
與訪問日志相同,建議為每個服務(wù)器設(shè)置一個單獨的錯誤日志文件,該文件將覆蓋更高級別的設(shè)置如http指令上下文。
例如,要將domain.com的錯誤日志設(shè)置為warn,你可以使用:
http { ... error_log /var/log/nginx/error.log; ... server { server_name domain.com error_log /var/log/nginx/domain.error.log warn; ... }}1.2.3.4.5.6.7.8.9.10.
無論何時修改配置文件,都必須重新加載Nginx服務(wù),以使更改生效。
日志文件的位置
在大多數(shù)Linux發(fā)行版中,例如Ubuntu ,CentOS和Debian。默認情況下,訪問和錯誤日志位于/var/log/nginx目錄中。
讀取和理解Nginx日志文件
你可以使用cat,less,grep,cut ,awk等命令打開和解析nginx日志文件。以下是使用默認的Nginx日志格式的訪問日志文件的記錄:
192.168.33.1 - - [15/Oct/2019:19:41:46 +0000] "GET / HTTP/1" 200 396 "-" "Mozilla/0 (X11; Linux x86_64) AppleWebKit/536 (KHTML, like Gecko) Chrome/38120 Safari/536"1.
讓我們細分Nginx日志文件記錄的每個字段意味著什么:
-
$remote_addr-192.168.33.1-發(fā)出請求的客戶端的IP地址。
-
$remote_user ---HTTP身份驗證用戶。未設(shè)置用戶名時,此字段顯示-。
-
[$time_local]-[15/Oct/2019:19:41:46 +0000]
本地服務(wù)器時間。
-
"$request" -"GET / HTTP/1.1"-請求類型,路徑和協(xié)議。
-
$status -200-服務(wù)器響應(yīng)代碼。
-
$body_bytes_sent -396-服務(wù)器響應(yīng)的大小(以字節(jié)為單位)。
-
"$http_referer" -"-"-引薦網(wǎng)址。
-
"$http_user_agent" -Mozilla/5.0 ...-客戶端的用戶代理(網(wǎng)絡(luò)瀏覽器)。
使用tail命令實時觀看日志文件記錄:
tail -f access.log