配置 Nginx 訪問與錯誤日誌
來自:入門小站
Nginx 是一個開放源代碼的高性能 HTTP 和反向代理服務器,負責處理 Internet 上某些最大站點的負載。在管理 NGINX 網絡服務器時,你要執行的最常見任務之一就是檢查日誌文件。
在對服務器或應用程序問題進行故障排除時,知道如何配置和讀取日誌非常有用,因爲它們提供了詳細的調試信息。
Nginx 用兩種類型的日誌記錄其事件:訪問日誌和錯誤日誌。訪問日誌記錄有關客戶端請求的信息,錯誤日誌記錄有關服務器和應用程序問題的信息。
本教程概述瞭如何配置和讀取 Nginx 訪問和錯誤日誌。配置 Nginx 訪問日誌的格式與位置,配置錯誤日誌格式與位置,默認的日誌文件所在位置,讀取和理解 Nginx 日誌文件每個字段。
配置 Nginx 訪問日誌
每當處理客戶請求時,Nginx 都會在訪問日誌中生成一個新記錄。每個事件記錄都包含一個時間戳,幷包含有關客戶端和所請求資源的各種信息。訪問日誌可以顯示訪問者的位置,訪問者的訪問的頁面等。
log_format
指令允許你定義記錄日誌的格式。access_log
指令啓用並設置日誌文件的位置和使用的格式。
access_log
指令的最基本語法如下:
access_log log_file log_format;
其中log_file
是日誌文件的完整路徑,log_format
是日誌文件使用的格式。可以在http
,server
或location
指令的上下文中啓用訪問日誌。
默認情況下,Nginx 主配置文件中的http
指令配置了全局訪問日誌格式。
http {
...
access_log /var/log/nginx/access.log;
...
}
/etc/nginx/nginx.conf
爲獲得更好的可維護性,建議爲每個服務器設置一個單獨的訪問日誌文件。在server
指令中設置的access_log
指令將覆蓋在http
指令中設置的access_log
。
http {
...
access_log /var/log/nginx/access.log;
...
server {
server_name domain.com
access_log /var/log/nginx/domain.access.log;
...
}
}
/etc/nginx/conf.d/domain.com.conf
如果未指定日誌格式,Nginx 將使用預定義的 combined 組合格式,如下所示:
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
要更改日誌記錄格式,請覆蓋默認設置或定義一個新設置。例如,定義一個名爲 main
的新日誌記錄格式,它將用添加X-Forwarded-For
header 的值來擴展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
。理論上你不會出現這種情況,Nginx 會自動刪除前期的日誌文件:
access_log off;
配置錯誤日誌
Nginx 將應用程序和常規服務器錯誤的消息寫入錯誤日誌文件。如果你在 Web 應用程序中遇到錯誤,則錯誤日誌是你開始進行排查問題的第一個位置。
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
指令上下文中定義:
http {
...
error_log /var/log/nginx/error.log;
...
}
/etc/nginx/nginx.conf
與訪問日誌相同,建議爲每個服務器設置一個單獨的錯誤日誌文件,該文件將覆蓋更高級別的設置如 http 指令上下文。
例如,要將 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 服務,以使更改生效。
日誌文件的位置
在大多數 Linux 發行版中,例如 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"
讓我們細分 Nginx 日誌文件記錄的每個字段意味着什麼:
-
$remote_addr
-192.168.33.1
- 發出請求的客戶端的 IP 地址。 -
$remote_user
--
-HTTP 身份驗證用戶。未設置用戶名時,此字段顯示-
。 -
[$time_local]
-[15/Oct/2019:19:41:46 +0000]
本地服務器時間。
-
"$request"
-"GET / HTTP/1.1"
- 請求類型,路徑和協議。 -
$status
-200
- 服務器響應代碼。 -
$body_bytes_sent
-396
- 服務器響應的大小(以字節爲單位)。 -
"$http_referer"
-"-"
- 引薦網址。 -
"$http_user_agent"
-Mozilla/5.0 ...
- 客戶端的用戶代理(網絡瀏覽器)。
使用tail
命令實時觀看日誌文件記錄:
tail -f access.log
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/_EL03ft9Fmr9Xfrx-XDDuw