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
指令配置了全域存取日誌格式。
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將應用程式和常規伺服器錯誤的訊息寫入錯誤日誌文件。如果你在網頁應用程式中遇到錯誤,則錯誤日誌是你開始進行排查問題的第一個位置。 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
目錄中。
你可以用 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
以上是如何設定Nginx存取與錯誤日誌的詳細內容。更多資訊請關注PHP中文網其他相關文章!