nginx的錯誤日誌
nginx錯誤日誌平時不用太關注,但是一旦出了問題,就需要借助錯誤日誌來判斷問題所在。
配置引數格式:error_log /path/to/log level;
nginx錯誤日誌級別
常見的錯誤日誌級別有debug | info | notice | warn | error | crit | alert | emerg
級別越高記錄的資訊越少,如果不定義,預設級別為error.
它可以配置在main、http、server、location段裡。
如果在配置檔案中定義了兩個error_log,在同乙個配置段裡的話會產生衝突,所以同乙個段裡只允許配置乙個error_log。
但是,在不同的配置段中出現是沒問題的。
nginx錯誤日誌示例
error_log /var/log/nginx/error.log crit;
如果要想徹底關閉error_log,需要這樣配置
error_log /dev/null;
nginx訪問日誌可以設定自定義的格式,來滿足特定的需求。
訪問日誌格式示例
示例1
示例2 log_format main '$remote_addr [$time_local] '
若不配置log_format或者不在access_log配置中指定log_format,則預設格式為:
'"$http_user_agent";
常見變數
變數說明
$time_local
通用日誌格式下的本地時間;(伺服器時間)
$remote_addr
客戶端(使用者)ip位址
$status
請求狀態碼,如200,404,301,302等
$body_bytes_sent
傳送給客戶端的位元組數,不包括響應頭的大小
$bytes_sent
傳送給客戶端的總位元組數
$request_length
請求的長度(包括請求行,請求頭和請求正文)
$request_time
請求處理時間,單位為秒,小數的形式
$upstream_addr
集群輪詢位址
$upstream_response_time
指從nginx向後端(php-cgi)建立連線開始到接受完資料然後關閉連線為止的時間
$remote_user
用來記錄客戶端使用者名稱
$request
請求方式(get或者post等)+url(包含$request_method,$host,$request_uri)
使用者瀏覽器標識
請求的url位址(目標url位址)的host
$host
等同於$http_host
請求中的當前uri(不帶請求引數,引數位於$args),不同於瀏覽器傳遞的$request_uri的值,它可以通過內部重定向,或者使用index指令進行修改。
$document_uri
等同於$uri
$request_uri
比$uri多了引數,即$uri+$args
如果使用了**,這個引數會記錄**伺服器的ip和客戶端的ip
nginx訪問日誌配置
web伺服器的訪問日誌是非常重要的,我們可以通過訪問日誌來分析使用者的訪問情況,
也可以通過訪問日誌發現一些異常訪問,比如cc攻擊。
格式: access_log /path/to/logfile format;
access_log可以配置到http, server, location配置段中。
配置示例
server
說明:若不指定log_format,則按照預設的格式寫日誌。
nginx訪問日誌過濾
這樣的請求其實可以不用記錄日誌。
配置示例
或location ~* ^.+\.(gif|jpg|png|css|js)$
nginx訪問日誌切割
如果任由訪問日誌寫下去,日誌檔案會變得越來越大,甚至是寫滿磁碟。
所以,我們需要想辦法把日誌做切割,比如每天生成乙個新的日誌,舊的日誌按規定時間刪除即可。
實現日誌切割可以通過寫shell指令碼或者系統的日誌切割機制實現。
shell指令碼切割nginx日誌
切割指令碼內容:
#!/bin/bash
logdir=/var/log/nginx //定義日誌路徑
prefix=`date -d "-1 day" +%y%m%d` //定義切割後的日誌字首
cd $logdir
for f in `ls *.log`
do mv $f $f-$prefix //把日誌改名
done
/bin/kill -usr1 $(cat /usr/local/nginx/logs/nginx.pid 2>/dev/null) 2>/dev/null //生成新的日誌
bzip2 *$prefix //壓縮日誌
find . -type f -mtime +180 |xargs /bin/rm -f //刪除超過180天的老日誌
系統日誌切割機制
在/etc/logrotate.d/下建立nginx檔案,內容為:
/data/logs/*log
說明:1 nginx日誌在/data/logs/目錄下面,日誌名字以log結尾
2 daily表示每天切割
3 rotate 30表示日誌保留30天
4 missingok表示忽略錯誤
5 notifempty表示如果日誌為空,不切割
6 compress表示壓縮
7 sharedscripts和endscript中間可以引用系統的命令
8 postrotate表示當切割之後要執行的命令
實戰 nginx定時備份日誌
實際應用 shell 定時任務 nginx 訊號管理 完成日誌按日期儲存 分析思路 凌晨00 00 01,把昨天的日誌重新命名 放在相應的目錄下 再 usr1 資訊號控制 nginx 重新生成新的日誌檔案 具體指令碼 bin bash base path usr local nginx logs l...
nginx日誌輪詢切割實戰
apache切割工具 cronlog 和rotare等日誌切割工具 nginx切割工具有 nginx cron x scripts 1 2 3 4 5 6 root web01 mkdir p server scripts root web01 cd server scripts root web0...
Nginx系列(八 nginx日誌)
remote addr,http x forwarded for 記錄客戶端ip位址 remote user 記錄客戶端使用者名稱 request 記錄請求的url和http協議 status 記錄請求狀態 body bytes sent 傳送給客戶端的位元組數,不包括響應頭的大小 該變數與apac...