nginx 日志相關指令主要有兩條,
log_format,用來設置日志格式,
access_log,用來指定日志文件的存放路徑、格式和緩存大小
log_format 格式
log_format name( 格式名字) 格式樣式(即想要得到什么樣的日志內容)
默認的示例:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_s ent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"']
#注釋:
$remote_addr 與$http_x_forwarded_for 用以記錄客戶端的ip地址;
$remote_user :用來記錄客戶端用戶名稱;
$time_local : 用來記錄訪問時間與時區;
$request : 用來記錄請求的url與http協議;
$status : 用來記錄請求狀態;成功是200,
$body_bytes_s ent :記錄發送給客戶端文件主體內容大??;
$http_referer :用來記錄從那個頁面鏈接訪問過來的;
$http_user_agent :記錄客戶機,瀏覽器的相關信息;
通常web服務器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過$remote_add拿到的IP地址是反向代理服務器的iP地址。反向代理服務器在轉發請求的http頭信息中,可以增加x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址;
log_format mylogformat ' $http_x_forwarded_for- $remote_user [$time_local] '' "$request" '$status $body_bytes_s ent '' "$http_referer" "$http_user_agent" ';
用access_log指令日志文件存放路徑;
用了log_format 指令設置了日志格式之后,需要用access_log指令指定日志文件的存放路徑;
access_log path(存放路徑) format (自定義日志名稱)
#示例:access_log logs/access.log main; #我們用log_format 定義了一個mylogformat的日志 我們可以寫成這樣access_log logs/access.log mylogformat; #如果不想啟用日志 :access_log off ;
在定義日志目錄中要注意的是,nginx進程設置的用戶和組必須有對該路徑 創建文件的權限,假設nginx的usr指令設置的用戶名和用戶組都是www,而logs目錄的用戶名和組是root,那么日志文件將無法被創建;
Nginx日志切割腳本
#!/usr/bin/env python import datetime,os,sys,shutil log_path = '/alidata/log/nginx/access/'log_file = 'www.wpython.com.log' yesterday = (datetime.datetime.now() - datetime.timedelta(days = 1)) try: os.makedirs(log_path + yesterday.strftime('%Y') + os.sep + / yesterday.strftime('%m')) except OSError,e: print print e sys.exit() shutil.move(log_path + log_file,log_path / + yesterday.strftime('%Y') + os.sep / + yesterday.strftime('%m') + os.sep / + log_file + '_' + yesterday.strftime('%Y%m%d') + '.log') os.popen("sudo kill -USR1 `cat /alidata/server/nginx/logs/nginx.pid`")
新聞熱點
疑難解答