首頁 > 運維 > Nginx > 主體

如何設定Nginx存取與錯誤日誌

WBOY
發布: 2023-05-16 08:10:05
轉載
1770 人瀏覽過

Nginx是一個開放原始碼的高效能HTTP和反向代理伺服器,負責處理網路上某些最大網站的負載。在管理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將應用程式和常規伺服器錯誤的訊息寫入錯誤日誌文件。如果你在網頁應用程式中遇到錯誤,則錯誤日誌是你開始進行排查問題的第一個位置。 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存取與錯誤日誌的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!