How To Configure Logging and Log Rotation in Nginx on an Ubuntu VPS
Configure logging and log rotation in Nginx on an Ubuntu VPS involves setting up Nginx to log requests and errors, and then configuring a log rotation mechanism to manage log file sizes and retention.
Prerequisites
To follow this tutorial, you will need:
- One Ubuntu 22.04 server with a non-root
sudo-enabled user with a firewall. Follow our Initial Server Setup to get started. - Nginx installed on the server. Follow our How to Install Nginx on Ubuntu 22.04 tutorial to get it installed.
With Nginx running on your Ubuntu 22.04 server, you’re ready to begin.
Here’s a step-by-step guide to Configure Logging and Log Rotation in Nginx :
Step 1: Configure Nginx Logging
1.Access Nginx Configuration: Open the Nginx configuration file for editing. This file is usually located in /etc/nginx/nginx.conf or in a specific site configuration file in /etc/nginx/sites-available/
sudo nano /etc/nginx/nginx.conf
2.Configure Access and Error Logs: Inside the http block, you can specify the location and format of the access and error logs:
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
# Other configurations...
}
access_log specifies the file where access logs are stored and the log format.
error_log specifies the file where error logs are stored and the log level.
3.Save and Exit: Save the changes and exit the text editor.
Step 2: Configure Log Rotation in Nginx
Log rotation is usually managed by the logrotate utility on Ubuntu.
- Create a Logrotate Configuration File for Nginx: Create a new logrotate configuration file for Nginx in
/etc/logrotate.d/.
sudo nano /etc/logrotate.d/nginx
Add Log Rotation Rules:
Add the following configuration to manage the rotation of Nginx logs:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
dailyrotates logs daily.missingokignores errors if the log file is missing.rotate 14keeps 14 days’ worth of logs.compresscompresses the rotated logs to save space.delaycompressdelays compression until the next rotation cycle.notifemptyskips rotation if the log file is empty.createsets permissions for the new log file.postrotatecontains commands to run after the log file is rotated. Thekill -USR1command tells Nginx to reopen its log files.
Save and Exit: Save the changes and exit the text editor.
Step 3: Test and Apply the Configuration
- Test Nginx Configuration: Before applying the changes, test the Nginx configuration to ensure there are no errors.
sudo nginx -t
- If the configuration test is successful, you will see a message like
syntax is okayandtest is successful. - Restart Nginx: Restart Nginx to apply the changes.
sudo systemctl restart nginx
Test Log Rotation: You can manually test log rotation to ensure it’s working correctly.
sudo logrotate -f /etc/logrotate.d/nginx
This command forces logrotate to perform a rotation. After running this command, check the log directory to verify that the logs have been rotated.
This section tells Nginx to reload the log files once the rotation is complete.
Conclusion
Proper log configuration and management can save you time and energy in the event of a problem with your server. Having access to the information that will help you diagnose a problem can be the difference between a trivial fix and a persistent headache.
It is important to keep an eye on server logs in order to maintain a functional site and ensure that you are not exposing sensitive information. This guide serves only as an introduction to your experience with logging. You can learn more general tips in our tutorial on How to Uninstall or Remove Package in Ubuntu.
