nginx日志輪轉是借助配置文件里的logrotate模塊來完成的。該模塊會周期性地檢測日志文件的尺寸,一旦達到設定的閾值,就會自動把老的日志文件重新命名,并生成一個全新的空白日志文件以持續記錄新產生的日志。這種方式能夠避免日志文件體積過大,節省磁盤空間。
下面就是Nginx日志輪轉的主要運作機制:
-
配置文件:首要的是,在Nginx的配置文檔里要標明日志文件的位置以及輪轉規則。這些信息一般存在于/etc/nginx/nginx.conf或者/etc/nginx/conf.d/目錄下的某份配置文件內。
-
日志文件位置:在配置文件中,需確定訪問日志(access log)和錯誤日志(Error log)的具體位置。例如:
Access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log;
-
輪轉規則:隨后,要設置日志輪轉的具體方案。這通常是經由logrotate工具達成的,它會在/etc/logrotate.d/目錄里尋找對應的配置文檔。以下是一份簡易的Nginx日志輪轉配置實例:
/var/log/nginx/*.log { daily missingok rotate 7 compress notifempty create 0640 nginx adm }
此配置的含義如下:
- daily:每日執行一次日志輪轉。
- missingok:若日志文件缺失,不會產生錯誤提示。
- rotate 7:保存最近七天的日志文件。
- compress:對舊日志文件進行壓縮。
- notifempty:若日志文件為空,則不執行輪轉。
- create 0640 nginx adm:新建日志文件時,權限設為0640,所有者為nginx,所屬組為adm。
-
定時任務:logrotate工具一般會在系統啟動時自動運行,并依據配置文檔中的規定周期性地檢查日志文件。另外,也可以通過cron定時任務手動觸發日志輪轉。
-
日志文件重命名與壓縮:當滿足輪轉條件時,logrotate會將舊的日志文件改名為附帶日期后綴的新文件名(如:access.log.1),并新建一個空的日志文件。同時,如果開啟了壓縮功能,還會將舊的日志文件壓縮成.gz格式。
-
清除舊日志:按照配置文件里的rotate參數,logrotate會移除超出指定天數的舊日志文件。
通過上述流程,Nginx日志輪轉能高效地管控日志文件的規模和數目,防止磁盤空間因過多的日志文件而被占用。