apache server-status not found. check if mod_status is enabled

I've enabled the apache_ plugins on a munin node:
ln -sv /usr/share/munin/plugins/apache_* /etc/munin/plugins/

After restarting the node with service munin-node restart here are the errors I'm getting:

$ munin-node-configure --suggest 2>/dev/null | grep "apache\|Plugin\|------"
Plugin                     | Used | Suggestions                            
------                     | ---- | -----------                            
apache_accesses            | yes  | no [apache server-status not found. check if mod_status is enabled]
apache_processes           | yes  | no [apache server-status not found. check if mod_status is enabled]
apache_volume              | yes  | no [apache server-status not found. check if mod_status is enabled]

However mod_status is already enabled:

$ a2enmod status
Module status already enabled

And restarting apache doesn't make a difference.

If I try to run the plugins manually here is what I get (I read that getting a U is bad news so at least that is consistent).

$ munin-run apache_accesses --debug
# Processing plugin configuration from /etc/munin/plugin-conf.d/munin-node
# Set /rgid/ruid/egid/euid/ to /110/65534/110 110 /65534/
# Setting up environment
# About to run '/etc/munin/plugins/apache_accesses'
accesses80.value U

$ munin-run apache_processes --debug
# Processing plugin configuration from /etc/munin/plugin-conf.d/munin-node
# Set /rgid/ruid/egid/euid/ to /110/65534/110 110 /65534/
# Setting up environment
# About to run '/etc/munin/plugins/apache_processes'
busy80.value U
idle80.value U
free80.value U

$ munin-run apache_volume --debug
# Processing plugin configuration from /etc/munin/plugin-conf.d/munin-node
# Set /rgid/ruid/egid/euid/ to /110/65534/110 110 /65534/
# Setting up environment
# About to run '/etc/munin/plugins/apache_volume'
volume80.value U

Does anybody know why I'm still getting the server-status not found message and how I can get rid of it?

Updated answer 1

Shane's suggestion was correct about setting a request handler using Location and SetHandler in the apache site. For more information on mod_status please refer to this page

I could verify that munin was effectively making the appropriate requests by looking at /var/log/apache2/access.log where I was getting this:

127.0.0.1 - - [10/Nov/2011:07:24:15 +0000] "GET /server-status?auto HTTP/1.1" 404 7774 "-" "libwww-perl/5.834

In my case setting the Location wasn't enough as I am running a Drupal site and the .htaccess combined with mod_rewrite were rewriting the requests. To fix it, I had to add the following line to my .htaccess

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteCond %{REQUEST_URI} !=/server-status  # <= added this line
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Please note that this doesn't represent a security problem since access to /server-status is restricted to 127.0.0.1 in the apache site.

Updated answer 2

It appears that adding the Location to the apache site wasn't needed after all since this is already defined in /etc/apache2/mods-enabled/status.conf. Btw, should you want to add the ExtendedStatus On directive, that's in that file that you should do it.


Solution 1:

Seems like it's trying to actually make requests to the status module. Do you have a proper config for the status location in your VirtualHost? Something like this:

<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Location>

Solution 2:

I found out I could run

$ wget http://localhost/server-status?auto

but not

$ wget http://127.0.0.1/server-status?auto

The first one is hitting the default server, the second a virtual server.

So I explicitly added an apache section to /etc/munin/plugin-conf.d/munin-node

[apache_*]
env.url   http://localhost:%d/server-status?auto
env.ports 80

and got my munin apache graphs.

Solution 3:

I found solution from Many Ayromlou on this site:

The problem is that these .htaccess rules in wordpress take over server-info and server-status urls activated in apache’s config and return a page not found error. I came across numerous sites that suggested adding a rule like:

    RewriteCond %{REQUEST_URI} !=/server-status

This didn't work for me. I'm not sure if the multisite version of wordpress (which I'm using) is causing this. The rule that worked beautifully is the following:

    RewriteRule ^(server-info|server-status) - [L]

This rule stops the rewrite engine whenever server-info or server-status is parsed as part of the URL.

Solution 4:

mod_status built into Apache web server to get server status from a web browser. With this module we can easily find out how well the server is performing. All reports are generated in a html format.

Step1. Check if status module is enabled or not apache2ctl -M or ls /etc/apache2/sites-enabled

Step2. If not enabled, enable it by the command,

sudo a2enmod status

step3. Configure access,

Open /etc/apache2/mods-enabled/status.conf and comment the lines,

        #<Location /server-status>
        #    SetHandler server-status
        #    Require local
        #Require ip 192.0.2.0/24
        #</Location>

And add the following line,

        <Location /server-status>
        SetHandler server-status
        Order deny,allow
        Allow from all
        </Location>

We can restrict the access of server status for particular IP’s in this configuration by editing , Allow from our_public_ipaddress instead of Allow from all

Save the status.conf file .

Step4. Restart apache by the command,

/etc/init.d/apache2 restart

Step5. Check the server status page in browser

http://server-ip/server-status

Hope this would be helpful.