一、介紹
Nginx是一款非常流行的Web服務器和反向代理服務器軟件。默認情況下,Nginx將所有的訪問日誌記錄到單個文件中。但是對於高流量的網站,可以把日誌文件按天分割,方便管理和分析。
本文將會介紹如何使用Nginx按天生成日誌文件,並且提供完整的配置代碼樣例。
二、按天生成日誌文件
在Nginx的配置文件中,可以通過配置access_log指令來指定訪問日誌記錄的文件路徑和格式。可以使用$符號來定義文件名和格式中的變量,並且Nginx支持時間格式化函數。因此,我們可以通過在文件名中加入時間變量的方式來實現按天生成日誌文件。
access_log /var/log/nginx/access.log.$time_iso8601 main;
在上面的配置中,$time_iso8601變量表示當前時間的ISO 8601格式,如2021-09-01T21:30:00+00:00。因此,Nginx會自動在每個ISO 8601格式發生變化的時間點創建新的日誌文件,並將對應的日誌記錄寫入到新文件中。
三、自動清理舊日誌文件
如果不對舊的日誌文件進行清理,日誌文件將會不斷增長佔用大量磁盤空間。為了避免這個問題,可以使用Linux系統自帶的logrotate工具來自動清理日誌文件。
logrotate是一個可以根據一定條件自動將舊日誌文件歸檔和刪除的工具。可以通過在配置文件中定義歸檔和刪除的條件來控制logrotate的行為。下面是一個可以用來清理Nginx按天生成的日誌文件的logrotate配置文件樣例:
/var/log/nginx/access.log { daily missingok rotate 7 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate /usr/sbin/service nginx reload > /dev/null endscript }
- daily:按日進行歸檔
- missingok:如果日誌文件不存在,則忽略錯誤
- rotate 7:保留最近7個歸檔文件,並刪除更早的文件
- compress:使用gzip進行壓縮
- delaycompress:延遲壓縮,下一次輪換時再壓縮
- notifempty:如果日誌文件為空,則不進行輪換
- create 0640 www-data adm:新創建的歸檔日誌文件屬性,屬主為www-data,屬組為adm,權限為rw-r—–
- sharedscripts:輪換後只執行一次postrotate腳本
- postrotate:輪換後要執行的命令。這裡使用service命令重載Nginx配置
四、完整的配置文件樣例
下面是一個完整的Nginx配置文件樣例,用於按天生成日誌文件並且使用logrotate對舊日誌文件進行清理:
user www-data; worker_processes auto; pid /run/nginx.pid; events { worker_connections 1024; # ... } http { log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; access_log /var/log/nginx/access.log.$time_iso8601 main; # ... } # logrotate配置文件 /var/log/nginx/access.log { daily missingok rotate 7 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate /usr/sbin/service nginx reload > /dev/null endscript }
五、總結
本文介紹了如何使用Nginx按天生成日誌文件,並且使用logrotate對舊日誌文件進行清理。例如可以指定以ISO 8601格式進行文件名的配置,以及在logrotate配置文件中指定保留多少個日誌文件和進行輪換的時間條件。以上方法可以幫助Nginx和服務器管理員更好地管理日誌文件,方便後期的數據分析和故障排查。
原創文章,作者:TQJBC,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/370408.html