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退出
測試證明 上述腳本能滿足要求。