配置Nginx錯誤和訪問日誌

Nginx是一個開源的高性能HTTP和反向代理服務器,負責處理Internet上一些最大站點的負載。 在管理NGINX Web服務器時,您將執行的最常見任務之一就是檢查日誌文件。

在對服務器或應用程序問題進行故障排除時,知道如何配置和讀取日誌非常有用,因為它們提供了詳細的調試信息。

Nginx用兩種類型的日誌記錄其事件記錄:訪問日誌和錯誤日誌。 訪問日誌寫入有關客戶端請求的信息,錯誤日誌寫入有關服務器和應用程序問題的信息。

本文概述了如何配置和讀取Nginx訪問和錯誤日​​志。

配置訪問日誌號

每當處理客戶請求時,Nginx都會在訪問日誌中生成一個新事件。 每個事件記錄都包含一個時間戳,並包含有關客戶端和所請求資源的各種信息。 訪問日誌可以向您顯示訪問者的位置,訪問者訪問的頁面,他們在頁面上花費的時間等等。

log_format 指令允許您定義記錄消息的格式。 的 access_log 指令啟用並設置日誌文件的位置和使用的格式。

最基本的語法 access_log 指令如下:

access_log log_file log_format;

哪裡 log_file 是日誌文件的完整路徑,並且 log_format 是日誌文件使用的格式。

可以在以下任一位置啟用訪問日誌 httpserver, 要麼 location 指令塊。

默認情況下,訪問日誌在 http Nginx主配置文件中的指令。

/etc/nginx/nginx.conf

http {
  ...
  access_log  /var/log/nginx/access.log;
  ...
}

為了提高可讀性,建議為每個服務器塊設置一個單獨的訪問日誌文件。 的 access_log 指令設置在 server 指令會覆蓋 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"';

要更改日誌記錄格式,請覆蓋默認設置或定義一個新設置。 例如,定義一個名為 習俗 這將擴展 合併的 格式,其值顯示 X-Forwarded-For 標頭在中添加以下定義 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將有關應用程序和常規服務器錯誤的消息寫入錯誤日誌文件。 如果您在Web應用程序中遇到錯誤,則錯誤日誌是開始進行故障排除的第一個位置。

error_log 指令啟用並設置錯誤日誌的位置和嚴重性級別。 它採用以下形式,可以在 httpserver, 要麼 location 塊:

error_log log_file log_level

log_level 參數設置日誌記錄級別。 以下是按嚴重性(從低到高)列出的級別:

  • debug -調試消息。
  • info -信息性消息。
  • notice -公告。
  • warn -警告。
  • error -處理請求時出錯。
  • crit -關鍵問題。 需要迅速採取行動。
  • alert -警報。 必須立即採取行動。
  • emerg – 緊急情況。 系統處於無法使用狀態。

每個日誌級別包括更高的級別。 例如,如果您將日誌級別設置為 warn,Nginx也會記錄 errorcritalertemerg 消息。

當。。。的時候 log_level 參數未指定,默認為 error

默認情況下, error_log 指令在 http nginx.conf主文件中的指令:

/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服務,以使更改生效。

日誌文件的位置

默認情況下,在大多數Linux發行版(如Ubuntu,CentOS和Debian)上,訪問和錯誤日​​志位於 /var/log/nginx 目錄。

閱讀和理解Nginx日誌文件#

您可以使用以下標準命令打開和解析日誌文件: catlessgrepcutawk , 等等。

這是來自訪問日誌文件的示例記錄,該記錄使用默認的Combine Nginx日誌格式:

192.168.33.1 - - [15/Oct/2019:19:41:46 +0000] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"

讓我們分解一下記錄的每個字段的含義:

  • $remote_addr192.168.33.1 -發出請求的客戶端的IP地址。
  • $remote_user- -HTTP驗證用戶。 未設置用戶名時,顯示此字段 -
  • [$time_local][15/Oct/2019:19:41:46 +0000] -本地服務器時間。
  • "$request""GET / HTTP/1.1" -請求類型,路徑和協議。
  • $status200 -服務器響應代碼。
  • $body_bytes_sent396 -服務器響應的大小(以字節為單位)。
  • "$http_referer""-" -引薦網址。
  • "$http_user_agent"Mozilla/5.0 ... -客戶端的用戶代理(網絡瀏覽器)。

使用 tail 命令以實時查看日誌文件:

tail -f  access.log 

結論#

日誌文件為您提供有關服務器問題以及訪問者如何與您的網站進行交互的有用信息。

Nginx允許您根據需要配置訪問和錯誤日​​志。

如果您有任何疑問或反饋,請隨時發表評論。

Nginx的

Sidebar