首頁 > 軟體

聊聊設定 Nginx 存取與錯誤紀錄檔的問題

2022-05-24 22:04:04

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

到此這篇關於設定 Nginx 存取與錯誤紀錄檔的文章就介紹到這了,更多相關Nginx 錯誤紀錄檔內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com