Nginx 日誌檔案 access log 詳解

2021-09-07 10:14:14 字數 1725 閱讀 3168

nginx 日誌相關指令主要有兩條,

一條是log_format,用來設定日誌格式,

另外一條是access_log,用來指定日誌檔案的存放路徑、格式和快取大小。

通俗的理解就是先用log_format來定義自己想用的日誌格式,然後在用access_log定義日誌時再把定義的log_format名稱 跟在後面;

1、log_format 格式

log_format name(格式名字) string(格式樣式即想要得到什麼樣的日誌內容)

示例:

log_format access '

注釋:$remote_user:用來記錄客戶端使用者名稱;

$time_local:用來記錄訪問時間與時區;

$request:用來記錄請求的http的方式與url;

$request_time:用來記錄請求時間;

$status:用來記錄請求狀態;成功是200,

$body_bytes_sent:記錄傳送給客戶端檔案主體內容大小;

通常web伺服器放在反向**的後面,這樣就不能獲取到客戶的ip位址了,通過$remote_add拿到的ip位址是反向**伺服器的ip位址。

反向**伺服器在**請求的http頭資訊中,可以增加x_forwarded_for資訊,用來記錄客戶端ip位址和客戶端請求的伺服器位址

2、用access_log指令日誌檔案存放路徑;

用了log_format 指令設定了日誌格式之後,需要用access_log指令指定日誌檔案的存放路徑;

access_log path(存放路徑) access(自定義日誌名稱,和log_format設定的名稱一致)

示例:access_log logs/access.log access;

注意:在定義日誌目錄中要注意的是,nginx程序設定的使用者和組必須有對該路徑建立檔案的許可權,

假設nginx的usr指令設定的使用者名稱 和使用者組都是www,而logs 目錄的使用者名稱和組是root,那麼日誌檔案將無法被建立。

用nginx做前端**後,我們發現 http_x_forwarded_for 無法獲取到客戶端真實的ip位址了。

原因 nginx 預設並不會增加 x_forwarded_for 頭資訊,我們給他加上就好了。簡單配置如下:

location /

重啟nginx載入新配置後,就可以獲取客戶端真實的ip位址了。

3.日誌切割:

通過如下方式達到日誌切割:

# vi logcron.sh

log_dir="

/data/logs/nginx

"date_dir=`date +%y%m%d`

/bin/mkdir -p $/$ > /dev/null

2>&1

/bin/mv $/access.log $/$/access.log

kill -usr1 `cat /opt/nginx/logs/nginx.pid`

定義乙個cron,在每天晚上23:

59:50執行這個指令碼,後面的事情就交給awstats了。

nginx 日誌檔案

我們觀察nginx的server段,可以看到如下類似資訊 access log logs host.access.log main 這說明 該server,它的訪問日誌的檔案是 logs host.access.log 使用的格式 main 格式.除了main格式,你可以自定義其他格式.main格式...

nginx 切割日誌檔案

1.首先編寫shell指令碼 cutlog.sh 放入nginx logs資料夾中 首先定義路徑變數 logs path usr local nginx logs 獲取昨天的 yyyy mm dd d date y m d 移動檔案 mv access.log log 向 nginx 主程序傳送 u...

Nginx 日誌檔案切割

阿里雲的nginx好久沒檢視過日誌,現在需要配置定時任務實現,日誌檔案切割,並刪除超過30天的日誌檔案。log.sh 指令碼檔案 bin bash 獲取當前時間 yyyy mm dd hh mm ss 格式 nowtime date y m d h m s cd usr local nginx mv...