Custom Apache Status page

I spent a good amount of time tweaking the performance of my VPS after learning about several sites hotlinking images from one of my own websites.

Now, this particular tutorial/article won’t be really about Apache performance, rather I’d like to share a little trick I learned for making your Apache server status page more usable.

First, we need to enable our /server-status page. To do this, we’ll need to enable the status Apache module.

a2enmod status

Great, now let’s set up a page that will show our server’s actual status page.

nano /etc/apache2/mods-available/status.conf

According to apache.org, the settings should look something like this:

<Location /server-status>
  SetHandler server-status
  Order Deny,Allow
  Deny from all
  Allow from .example.com
</Location>

If you’re for example running WordPress on the same server, you will also need to exclude this page from the site’s .htaccess file.

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/server-status
RewriteRule . /index.php [L]

Save, reload apache –

service apache2 reload

And you’re good to go! Navigate to yourwebsite.com/server-status and you should see something like this:

Out of the box, the server status page doesn’t look like much. And don’t even try to view it on your phone. Luckily, there’s something we can do to improve this.

I came across this article that explains how to use Apache’s substitute module to inject custom CSS – or any other content – to your page.

I also made it so that only certain IP addresses are allowed to view my server status page (feel free to take it a step further and set up a password as well).

My updated status.conf file looks like this.

<Location /server-status>
  SetHandler server-status
  Order deny,allow
  Deny from all
  Allow from IPADDRESS1 IPADDRESS2 IPADRESS3
  AddOutputFilterByType SUBSTITUTE text/html
  SetOutputFilter SUBSTITUTE;DEFLATE
  Substitute 's|</head>|<style type="text/css">@import "/other/server-status/status.css"</style><meta name="viewport" content="width=device-width, initial-scale=1"></head>|'
</Location>

Here is my custom CSS.

And the result:

Being able to inject custom HTML into your server status page gives you quite a lot of freedom, as this person’s Pimped Apache Server Status project shows:

Similarly, you can also customize the looks of your server generated directory listings or your error pages.

More tutorials

A tinted, zoomed in screenshot of a JSON object showing server information about a Mastodon instance.
A tinted screenshot of two charts, one showing the popularity of various fediverse platforms (with Mastodon far ahead of the rest), and the other chart showing distribution of domain creation dates, mostly clustered around 2023.
A tinted screenshot showing the @mtaupdates Mastodon profile and a few example posts with subway status alerts.

💻 Browse all