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 dirlogs_path="/var/log/nginx/"rm -f ${logs_path}access_$(date -d "last week" +"%Y%m%d").logrm -f ${logs_path}error_$(date -d "last week" +%Y%m%d").logmv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").logmv ${logs_path}error.log ${logs_path}error_$(date -d "yesterday" +"%Y%m%d").logkill -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退出
測試證明 上述腳本能滿足要求。
新聞熱點
疑難解答