<Location /status>
SetHandler server-status
order deny,allow
allow from all
</Location>
But when I visit http://ip:port/status
,
a 404 Not Found
is reported, why?
<Location /status>
SetHandler server-status
order deny,allow
allow from all
</Location>
But when I visit http://ip:port/status
,
a 404 Not Found
is reported, why?
This can also happen when you have a
.htaccess
file in the document root and that file contains aRewriteRule
, as is common with CMS pretty URLs.The explanation for this behaviour is as follows. The
<Location>
directives act first, but the handler is not called at this stage. So then theRewriteRule
sets a handler, eg to run a PHP script, soSetHandler
has no effect in the end.If this is the cause, find the
RewriteRule
that is causing the problem(*), and add before it:This excludes the
server-status
URI from theRewriteRule
in the same way that existing static files may be excluded. Of course what you use in place of/server-status
must exactly match theLocation
chosen, which in the question is instead/status
. (Tested on Apache 2.2.22 and Apache 2.4)Addendum: also note that you can get a 403 trying to read the
server-status
if theDocumentRoot
is not readable by the apache process at all, again because the server-status handler doesn't have a chance to work.Addendum 2: if the
.htaccess
for the Apache default site is frequently overwritten, and the/server-status
URL is necessary for eg Munin to work, then creating a<VirtualHost 127.0.0.1:80>
stanza including the server-status handler may be administratively simplest.Addendum 3(*): the
RewriteRule
that is causing the problem is potentially anything that matches the string/server-status
. This may be identifiable because the first parameter will match anything, for example beginningRewriteRule .
where the.
will match any character, or^(.*)
, or otherwise is catching the URI such as.*\bstatus$
. You may also identify it because it deliberately excludes existing files with!-f
.For example, if WordPress is the main site and you want
/server-status
to appear on it, and for some reason Addendum 2 above is not applicable, you may want to insert an extraRewriteCond
as follows:However, it probably does no harm before any
RewriteRule
.My guess would be that you didn't load the status module - Can you confirm it ?
Because you've misconfigured something. What do your logs say about the cause of the 404? My first guess would be that
ip:port
isn't a valid vhost (or at least not valid for the vhost you've put the<Location /status>
in, anyway), and it's probably dropping back to the default vhost. The error logs will make mention of irrational paths you didn't configure if that's the case. Other error log messages will mean different things, which is why it's so important to check them.https://serverfault.com/a/388457/ had the answer for me. Needed to actively block the call rather than trying to find/block every .htaccess RewriteRule interfering with request handling.
I added:
RewriteRule ^/server-status - [L]
Into the location block, and it started working.
the docs are:
your location differs, I would not think it should matter, but try your location as /server-status instead of just /status.
However - I think Spud is right. you have not loaded that module.
-sean
If you are using WampServer, as I am for development, make a note of the following:
The
httpd-info.conf
file located atwamp\bin\apache\apache[version]\conf\extra
contains relevant<Location>
configuration:<Location /server-status> SetHandler server-status #Require host .example.com #Require ip 127 </Location>
This file may or may not actually be included in your Apache configuration. Look for the following line in your
httpd.conf
file and make sure it is uncommented:Include conf/extra/httpd-info.conf
In my case, the main problem was the latter: the line was commented by default and thus
httpd-info.conf
wasn't even loading.If you are using mod_rewrite and vhost configuration you need to add a blank vhost entry at the top of the vhost configuration file e.g.
Then you can access it via the server IP address e.g. ip_address/server-status