1. 程式人生 > >Nginx配置中的log_format(設定詳細的日誌格式)

Nginx配置中的log_format(設定詳細的日誌格式)

配置檔案 (/usr/local/nginx/conf/nginx.conf)

引言

nginx伺服器日誌相關指令主要有兩條:log_format,用來設定日誌格式;access_log,用來指定日誌檔案的存放路徑、格式和快取大小,可以參考ngx_http_log_module

log_format 設定日誌格式

log_format指令用來設定日誌的記錄格式,它的語法如下:
    log_format name format {format …}
其中,name表示定義的格式名稱,format表示定義的格式樣式。

說明:
① log_format有一個預設的、無須設定的main日誌格式,如下圖所示: 在這裡插入圖片描述


② 也可以根據自己的需求,自定義日誌的記錄格式,但是名稱不能重複

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

                  192.168.122.1 - - [17/Dec/2018:10:47:58 +0800] "GET / HTTP/1.1"
304 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"

常用的內建變數以及含義

引數                      說明                                         示例
$remote_addr             客戶端地址                                    192.168.122.1
$remote_user             客戶端使用者名稱稱                                --
$time_local
訪問時間和時區 17/Dec/2018:10:47:58 +0800 $request 請求的URI和HTTP協議 "GET / HTTP/1.1" $status HTTP請求狀態 304 $upstream_status upstream狀態 0 $body_bytes_sent 傳送給客戶端檔案內容大小 - $http_referer url跳轉來源,用於記錄是從哪個頁面連結訪問過來的 $http_user_agent 使用者終端瀏覽器等資訊,即客戶瀏覽器的相關資訊 "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0" $http_host 請求地址,即瀏覽器中你輸入的地址(IP或域名) www.wang.com 192.168.100.100 $ssl_protocol SSL協議版本 TLSv1 $ssl_cipher 交換資料中的演算法 RC4-SHA $upstream_addr 後臺upstream的地址,即真正提供服務的主機地址 10.10.10.100:80 $request_time 整個請求的總時間 0.205 $upstream_response_time 請求過程中,upstream響應時間 0.002

詳解$http_x_forwarded_for

為什麼引出$http_x_forwarded_for?
答案
①remote_addr代表客戶端的IP,但它的值不是由客戶端提供的,而是服務端根據客戶端的ip指定的,當你的瀏覽器訪問某個網站時,假設中間沒有任何代理,那麼網站的web伺服器(Nginx,Apache等)就會把remote_addr設為你的機器IP; 如果使用了某個代理,那麼你的瀏覽器會先訪問這個代理,然後再由這個代理轉發到網站,這樣web伺服器就會把remote_addr設為這臺代理機器的IP。
②因此引出內建變數$x_forwarded_for: 使用者經過代理時,代理會增加這個欄位,這樣就能保證nginx就能使用內建變數$http_x_forwarded_for獲取到客戶端的真實IP。 沒有使用代理時,此欄位為空

X-Forwarded-For 請求頭格式介紹

X-Forwarded-For: client, proxy1, proxy2

可以看到,X-F-F 的內容由「英文逗號 + 空格」隔開的多個部分組成,最開始的是離服務端最遠的裝置 IP,然後是每一級代理裝置的 IP。

舉例說明:如果一個 HTTP 請求到達伺服器之前,經過了三個代理 Proxy1、Proxy2、Proxy3,IP 分別為 IP1、IP2、IP3,使用者真實 IP 為 IP0,那麼按照 X-F-F 標準,服務端最終會收到以下資訊:X-Forwarded-For: IP0, IP1, IP2
Proxy3 直連伺服器,列表中並沒有 IP3,IP3 可以通過服務端的 Remote Address 欄位獲得。

access_log 配置

觀察nginx.conf配置檔案中的server段,可以看到如下的資訊:access_log logs/host.access.log main;
在這裡插入圖片描述
logs/host.access.log:儲存訪問資訊的日誌檔案是
使用main格式儲存訪問資訊