Nginx 實戰 nginx的日誌配置

2021-09-02 01:18:11 字數 3658 閱讀 4904

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...