Nginx 日誌配置引數詳解
log_format
log_format用來設定日誌格式,也就是日誌檔案中每條日誌的格式,具體如下:
log_format name(格式名稱) type(格式樣式)
log_format main '$server_name $remote_addr - $remote_user [$time_local] "$request"'
'$status $uptream_status $body_bytes_sent "$http_referer"'
'"$http_user_agent" "$http_x_forwarded_for" '
'$ssl_protocol $ssl_cipher $upstream_addr $request_time $upstream_response_time';
$server_name:虛擬主機名稱。
$remote_addr:遠端客戶端的IP地址,請求者IP。
-:空白,用一個“-”佔位符替代,歷史原因導致還存在。
$remote_user:遠端客戶端使用者名稱稱,用於記錄瀏覽者進行身份驗證時提供的名字,如登入百度的使用者名稱scq2099yt,如果沒有登入就是空白。
[$time_local]:訪問的時間與時區,比如07/Jun/2016:08:54:27 +0800,時間資訊最後的"+0800"表示伺服器所處時區位於UTC之後的8小時。
$request:請求的URI和HTTP協議,這是整個PV日誌記錄中最有用的資訊,記錄伺服器收到一個什麼樣的請求
$status:記錄請求返回的http狀態碼,比如成功是200。
$uptream_status:upstream狀態,比如成功是200.
$body_bytes_sent:傳送給客戶端的檔案主體內容的大小,比如899,可以將日誌每條記錄中的這個值累加起來以粗略估計伺服器吞吐量。
$http_referer:記錄從哪個頁面連結訪問過來的。
$http_user_agent:客戶端瀏覽器資訊
$http_x_forwarded_for:客戶端的真實ip,通常web伺服器放在反向代理的後面,這樣就不能獲取到客戶的IP地址了,通過$remote_add拿到的IP地址是反向代理伺服器的iP地址。反向代理伺服器在轉發請求的http頭資訊中,可以增加x_forwarded_for資訊,用以記錄原有客戶端的IP地址和原來客戶端的請求的伺服器地址。
$ssl_protocol:SSL協議版本,比如TLSv1。
$ssl_cipher:交換資料中的演算法,比如RC4-SHA。
$upstream_addr:upstream的地址,即真正提供服務的主機地址。
$request_time:整個請求的總時間。
$upstream_response_time:請求過程中,upstream的響應時間。
訪問日誌中一個典型的記錄如下:
192.168.2.36 - - [07/Jun/2016:08:54:27 +0800] "GET /1.jpg HTTP/1.1" 200 20146 "
access_log
access_log 指令用來指定日誌檔案的存放路徑(包含日誌檔名)、格式和快取大小。具體如下:
access_log path(存放路徑) [format(自定義日誌格式名稱) [buffer=size | off]]
舉例說明如下:
access_log logs/access.log main;
如果想關閉日誌,可以如下:
access_log off;
能夠使用access_log指令的欄位包括:http server和location。
Tips:如果需要在access_log中記錄post請求的引數,可以參考這裡。
開啟訪問日誌
在Nginx的主配置檔案nignx.conf的http段內定義好log_format,比如:
log_format luo '$server_name $remote_addr - $remote_user [$time_local] "$request"'
'$status $uptream_status $body_bytes_sent "$http_referer"'
'"$http_user_agent" "$http_x_forwarded_for" '
'$ssl_protocol $ssl_cipher $upstream_addr $request_time $upstream_response_time';
在配置檔案中http server或者location段中開啟記錄。
access_log logs/access.log luo;
錯誤日誌
錯誤日誌主要記錄客戶端訪問Nginx出錯時的日誌,格式不支援自定義。通過錯誤日誌,我們可以得到系統某個服務或server的效能瓶頸等。因此,將日誌好好利用,你可以得到很多有價值的資訊。
error_log
錯誤日誌由指令error_log來指定,具體格式如下
error_log path(存放路徑) level(日誌等級)
path含義同access_log,level表示日誌等級,具體如下:[ debug | info | notice | warn | error | crit ]
從左至右,日誌詳細程度逐級遞減,即debug最詳細,crit最少。
舉例說明如下:
error_log logs/error.log info;
需要注意的是:error_log off並不能關閉錯誤日誌,而是會將錯誤日誌記錄到一個檔名為off的檔案中。
正確的關閉錯誤日誌記錄功能的方法如下:
error_log /dev/null;
上面表示將儲存日誌的路徑設定為"空裝置"。