首頁> 運維> Nginx> 主體

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

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

Nginx是一個開放原始碼的高效能HTTP和反向代理伺服器,負責處理網路上某些最大網站的負載。在管理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將應用程式和常規伺服器錯誤的訊息寫入錯誤日誌文件。如果你在網頁應用程式中遇到錯誤,則錯誤日誌是你開始進行排查問題的第一個位置。error_log指令啟用並設定錯誤日誌的位置和嚴重性等級。它採用以下格式,可以在httpserverlocation上下文中設定:

error_log log_file log_level
登入後複製

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

debug info notice warn error crit alert emerg
登入後複製

每個日誌等級包括更高等級。例如,如果你將日誌等級設為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日誌檔案

你可以用catlessgrep#cutawk等指令開啟和解析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_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存取與錯誤日誌的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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