Log Rotate hay còn gọi là “quay vòng log” nó có tác dụng chia log ra thành file nhỏ, rồi nén log theo từng ngày để dễ dàng quản lý giảm dung lượng đĩa cứng. Với mỗi website lại có access log và error log khác nhau thì bạn phải cấu hình lại logrotate nếu không toàn bộ log sẽ được dồn vào một file duy nhất, rất khó khăn khi đọc log và quản lý. Tài liệu chính thức Nginx log rotation rất thiếu thông tin và hôm nay tôi đã được tìm kiếm một cách để rotate các bản log Nginx, ta cần chắc chắc sử dụng phiên bản mới nhất Nginx thiết lập từ RPM và nó đã kích hoạt log rotation. Trong trường hợp Nginx của bạn không được kích hoạt log rotation, bạn có thể làm điều đó bằng cách sử dụng script đơn giản sau: Tạo một tập tin gọi là /etc/logrotate.d/nginx Mã: pico -w /etc/logrotate.d/nginx Đưa nội dung này vào trong và sửa đổi dòng đầu tiên để phù hợp với thư mục log Nginx của bạn, nó có thể là: Mã: /usr/local/nginx/logs /etc/nginx/logs /var/log/nginx Sau khi thực hiện, tập tin của bạn sẽ trông như thế này: Mã: /var/log/nginx/*.log { daily missingok rotate 52 compress delaycompress notifempty create 640 nginx adm sharedscripts postrotate [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` endscript } Một vài thông số cấu hình logrotate cần chú ý . /var/logs/nginx/*.log đường dẫn đến folder chứa log. Chỉ định những file log nào được rotate, ở đây dùng wildcard name có nghĩa tất cả file log có phần mở rộng .log sẽ được rotate. Cụ thể trong bài là access.log và error.log. Trong trường hợp có tạo nhiều virtualhost file log sẽ có đường dẫn khác nhau ví dụ /var/logs/nginx/web1/*log/var/logs/nginx/web2/*log thì bạn ngăn cách chúng bằng khoảng trắng hoặc xuống dòng. daily chu kỳ quay vòng log file theo ngày, bạn có thể để giá trị theo weekly/monthly/yearly. missingok không xuất thông báo lỗi vì lý do mất file log hay bị di chuyển đi đâu đó. rotate số file log giữ lại, file cũ hơn sẽ bị xóa đi ở trên mình giữa lại 7 file tương ứng 1 tuần. Muốn lưu nhiều hơn thì nên setup syslog server để lưu trữ và phân tích log. compress chỉ định nén file log thành định dạng .gz. nocompress không muốn nén. delaycompress không nén file log sau khi rotate mà đợi đến lần rotate tiếp theo. notifempty không rotate nếu file log rỗng. create phân quyền cho file, như cấu hình trên file log tạo ra sẽ có quyền 640 thuộc sở hữu (owner) của user nginx và nhóm (group) adm vì có thể những dữ liệu này sẽ được dùng bởi chương trình khác. nocreate không tạo file log mới. sharedscripts có nghĩa sẽ chạy script trong postrotate một lần với tất cả các file .log. Nếu không dùng sharedscripts. Access.log nginx sẽ restart một lần, error.log sẽ restart lại lần nữa là 2 lần. Nginx là web server đặc biệt, mặc dùng khởi động lại nhưng website của bạn vẫn chạy ầm ầm. Tuy vậy việc khởi đổi nhiều lần là không cần thiết. postrotate ... endscript đoạn này quy định sẽ khởi động nginx sau khi rotate với script [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` Đợi 24 giờ cho đến khi cron chạy hằng ngày và kiểm tra nếu thấy bất kỳ tập tin .gz bên trong thư mục log của bạn, nếu bạn thấy một số tập tin đã giải nén, thì Nginx rotation của bạn đang làm việc tốt.