網站首頁 編程語言 正文
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
原文鏈接:http://www.yunweipai.com/41523.html
相關推薦
- 2022-06-28 ES6基礎語法之數組拓展_基礎知識
- 2023-02-10 一文教會你用Python實現pdf轉word_python
- 2022-07-09 使用Jquery操作Cookies_jquery
- 2022-09-15 C/C++?左移<<,?右移>>的作用及說明_C 語言
- 2022-12-05 python如何在文件中部插入信息_python
- 2022-07-19 tomcat升級 遇到的坑 運行tomcat的時候出現NosuchMethodError
- 2022-11-21 Go語言實現ssh&scp的方法詳解_Golang
- 2024-03-13 TypeError: Cannot read property ‘get‘ of undefined
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支