nginx日誌處理

nginx的配置文件 /etc/nginx.conf文件中

定義Nginx的日誌格式使用 log_format 這個配置項,默認的格式爲:

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

如果將Nginx服務器作爲web服務器,位於負載均衡設備、Squid、Nginx反向代理之後,就不能獲取到客戶端的真實IP地址了。原因是經過反向代理後,由於在客戶端和web服務器之間增加了中間層,

因此web服務器無法直接拿到客戶端的IP,通過$remote_addr變量拿到的將是反向代理服務器的IP地址。但是反向代理服務器在轉發請求的Http頭信息中,可以增加X-Forwarded-For信息,用於記錄原有的客戶端IP地址和原來客戶端請求的服務器地址。



爲每一個虛擬站點保存日誌(包括訪問日誌和錯誤日誌)用 access_log 以及 error_log 這兩個配置項

        access_log  /var/log/nginx/access.log  main;
        error_log   /var/log/nginx/error.log notice;

由於服務器上的日誌一直處於增長中,我們需要保證磁盤空間,可以考慮只保留一週內的日誌文件,另外,當日的日誌文件不要太大,太大會引起磁盤讀寫效率問題。

所以這裏寫了一個shell腳本,用於刪除一週前的日誌文件以及將重新生成當天的日誌文件,在每天凌晨執行該任務。

vim cut_nginx_log.sh

#!/bin/bash
#執行腳本刪除一些訪問日誌和錯誤日誌文件

#nginx log dir
logs_path="/var/log/nginx/"

rm -f ${logs_path}access_$(date -d "last week" +"%Y%m%d").log
rm -f ${logs_path}error_$(date -d "last week" +%Y%m%d").log
mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log
mv ${logs_path}error.log ${logs_path}error_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /var/run/nginx/nginx.pid`

Crontab的格式定義:

  第1列分鐘1~59
第2列小時1~23(0表示子夜)
第3列日1~31
第4列月1~12
第5列星期0~6(0表示星期天)
第6列要運行的命令


crontab -e

00 00 * * * /bin/bash /usr/local/nginx/script/cut_nginx_log.sh

Ctrl+o保存 Ctrl+x退出

測試證明 上述腳本能滿足要求。


發佈了101 篇原創文章 · 獲贊 27 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章