Nginx 日志文件 access_log詳解及日志分割


Module ngx_http_log_module

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

一條是log_format,用來設置日志格式,
另外一條是access_log,用來指定日志文件的存放路徑、格式和緩存大小。
通俗的理解就是先用log_format來定義自己想用的日志格式,然后在用access_log定義日志時再把定義的log_format名稱 跟在后面;

1、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地址。

反向代理服務器在轉發請求的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 /   
{   
    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.日志切割:
通過如下方式達到日志切割:

vim /opt/cut_nginx.sh
#!/bin/bash
#切割日志
datetime=$(date -d "-1 day" "+%Y%m%d") log_path
="/usr/local/nginx/logs" pid_path="/usr/local/nginx/logs/nginx.pid" [ -d $log_path/backup ] || mkdir -p $log_path/backup if [ -f $pid_path ] then mv $log_path/access.log $log_path/backup/access.log-$datetime kill -USR1 $(cat $pid_path) find $log_path/backup -mtime +30 | xargs rm -f \\mtime :文件被修改時間 atime:訪問時間(文件中的數據庫最后被訪問的時間) ctime:改變時間(文件的元數據發生變化。比如權限,所有者等) else echo "Error,Nginx is not working!" | tee -a /var/log/messages fi

chmod +x /opt/cut_nginx.sh

crontab -e 設置定時任務

0  0  *  *  *     /opt/cut_nginx.sh

[root@localhost ~]# /opt/cut_nginx_log.sh

[root@localhost ~]# ls /usr/local/nginx/logs/backup/

access.log-20161117

[root@localhost ~]# killall -9 nginx

[root@localhost ~]# /opt/cut_nginx_log.sh

Error,Nginx is not working!

[root@localhost ~]# tail -1 /var/log/messages

Error,Nginx is not working!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM