Learn how to install and configure GoAccess on Debian 13 for real-time Nginx or Apache web log analysis.
Introduction
GoAccess is an open-source, real-time web log analyzer and interactive viewer that helps us monitor and understand our server traffic through a visual dashboard. Designed to be fast and minimal, GoAccess processes web server log files (like those from Nginx or Apache) and turns raw data into meaningful insights all from the command line or via a live HTML report.
In this guide, we will install GoAccess, generate both static and live reports, and configure Nginx to serve a real-time dashboard securely.
Prerequisites
Before we begin, let’s ensure we have the following in place:
- A Debian 13 dedicated server or KVM VPS.
- A basic programming knowledge.
How to Install and Configure GoAccess on Debian 13 for Real-Time Nginx/Apache Log Analysis
Step 1: Update the System
Start with a clean and updated environment.
sudo apt update
sudo apt -y upgrade
Step 2: Install GoAccess
Debian 13 includes GoAccess in the official repository.
sudo apt -y install goaccess
Verify installation:
goaccess --version
Step 3: Generate a Static HTML Report
Before enabling real-time mode, confirm that GoAccess can parse the logs and generate reports.
For Nginx:
sudo goaccess /var/log/nginx/access.log --log-format=COMBINED -o /var/www/html/goaccess.html
Open in browser:
http://server-ip/goaccess.html
At this point we should see a full analytics dashboard.
Step 4: Generate Real-Time HTML Report
Now enable live monitoring. This command generates the dashboard and starts a local WebSocket server on port 7890.
sudo goaccess /var/log/nginx/access.log \
--log-format=COMBINED \
--real-time-html \
-o /var/www/html/goaccess-live.html
Leave it running and continue in a new terminal.
Step 5: Configure Nginx for WebSocket Proxy
The live dashboard uses WebSockets, so Nginx must proxy the /ws endpoint.
Open default site configuration:
sudo nano /etc/nginx/sites-available/default
Inside the server block, add:
location /goaccess-live.html {
try_files $uri $uri/ =404;
}
location /ws {
proxy_pass http://127.0.0.1:7890;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
Reload Nginx:
sudo nginx -t
sudo systemctl reload nginx
Step 6: Access Real-Time Dashboard
Open in browser:
http://server-ip/goaccess-live.html
The dashboard will now update live as new log entries are written.
Step 7: Run GoAccess as a Systemd Service
To keep the live report running permanently, create a systemd service.
sudo tee /etc/systemd/system/goaccess-live.service >/dev/null <<EOF
[Unit]
Description=GoAccess Real-Time Log Analyzer
After=network.target
[Service]
ExecStart=/usr/bin/goaccess /var/log/nginx/access.log \
--log-format=COMBINED \
--real-time-html \
-o /var/www/html/goaccess-live.html
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
Enable and start the service:
sudo systemctl daemon-reload
sudo systemctl enable --now goaccess-live
Verify status:
sudo systemctl status goaccess-live
Step 8: Protect GoAccess Dashboard with Nginx Authentication
Install the htpasswd utility:
sudo apt install -y apache2-utils
Create authentication file:
sudo htpasswd -c /etc/nginx/.goaccess_auth admin
Enter a strong password.
Now edit Nginx config:
sudo nano /etc/nginx/sites-available/default
Inside the existing location /goaccess-live.html block, add:
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.goaccess_auth;
So it becomes:
location /goaccess-live.html {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.goaccess_auth;
try_files $uri $uri/ =404;
}
Reload Nginx:
sudo nginx -t
sudo systemctl reload nginx
Now the dashboard asks for credentials instead of welcoming random strangers.
Security Note
The GoAccess dashboard exposes traffic details including IPs, URLs, and referrers. It is recommended to protect the report using Nginx authentication, IP restrictions, or internal network access only.
Conclusion
We now have seen how to install and configure GoAccess on Debian 13 for real-time Nginx or Apache web log analysis. This setup provides clear visibility into website traffic and performance without introducing heavy monitoring platforms.

