Nginx 日誌文件 access_log 詳解

Module ngx_http_log_module前端

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

一條是log_format,用來設置日誌格式,
另一條是access_log,用來指定日誌文件的存放路徑、格式和緩存大小。
通俗的理解就是先用log_format來定義本身想用的日誌格式,而後在用access_log定義日誌時再把定義的log_format名稱 跟在後面;web

一、log_format 格式瀏覽器

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

示例:服務器

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

註釋:
$remote_addr:與 $http_x_forwarded_for 用以記錄客戶端的ip地址;
$remote_user:用來記錄客戶端用戶名稱;
$time_local:用來記錄訪問時間與時區;
$request:用來記錄請求的http的方式與url;
$request_time:用來記錄請求時間;
$status:用來記錄請求狀態;成功是200,
$body_bytes_sent:記錄發送給客戶端文件主體內容大小;
$http_referer:用來記錄從那個頁面連接訪問過來的;
$http_user_agent:記錄客戶毒啊瀏覽器的相關信息。

 


一般web服務器放在反向代理的後面,這樣就不能獲取到客戶的IP地址了,經過$remote_add拿到的IP地址是反向代理服務器的iP地址。url

反向代理服務器在轉發請求的http頭信息中,能夠增長x_forwarded_for信息,用來記錄客戶端IP地址和客戶端請求的服務器地址spa

二、用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 /   
{   
    proxy_pass          http://www.xxx.com;   
    proxy_set_header    Host             $host;   
    proxy_set_header    X-Real-IP        $remote_addr;   
    proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;    //別忘了這一句   
    proxy_set_header    HTTP_X_FORWARDED_FOR $remote_addr;              //或是加上這一句   
    proxy_redirect      default;   
}

 

重啓nginx加載新配置後,就能夠獲取客戶端真實的IP地址了。

3.日誌切割:
經過以下方式達到日誌切割:

# vi logcron.sh
log_dir="/data/logs/nginx"
date_dir=`date +%Y%m%d`
/bin/mkdir -p ${log_dir}/${date_dir} > /dev/null 2>&1
/bin/mv ${log_dir}/access.log ${log_dir}/${date_dir}/access.log
kill -USR1 `cat /opt/nginx/logs/nginx.pid`
定義一個cron,在天天晚上23:59:50執行這個腳本,後面的事情就交給awstats了。
相關文章
相關標籤/搜索