配置 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是日誌文件使用的格式。可以在httpserverlocation指令的上下文中啓用訪問日誌。

默認情況下,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-Forheader 的值來擴展combined格式,在httpserver中添加以下定義指令:

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指令啓用並設置錯誤日誌的位置和嚴重性級別。它採用以下格式,可以在httpserverlocation上下文中進行設置:

error_log log_file log_level

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

每個日誌級別包括更高級別。例如,如果你將日誌級別設置爲warn,則 Nginx 還將記錄errorcritalertemerg消息。未指定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 日誌文件

你可以使用catlessgrepcut ,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 日誌文件記錄的每個字段意味着什麼:

本地服務器時間。

使用tail命令實時觀看日誌文件記錄:

tail -f access.log

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/_EL03ft9Fmr9Xfrx-XDDuw