VHOST Basic Auth与apache服务器状态冲突

时间:2014-05-14 05:11:23

标签: apache vhosts

我正在尝试让服务器状态在具有使用基本身份验证的apache VHOST的服务器上工作。

在主httpd.conf配置文件中,我设置了服务器状态:

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

如果我在主机的服务器状态上执行GET,系统会提示我输入用户名和密码:

 [root@uszmplb apache2]# GET http://$(hostname -i)/server-status
Enter username for Restricted Area at 10.10.1.246:80:

如果我输入了我有权访问的用户名和密码,我可以从GET命令获取服务器状态页面。但问题是,这需要自动进行监控。如果受到用户名和密码的保护,监控部门不能/不会监控该主机。

如果我将VHOST conf与服务器状态一起移动,我可以获取服务器状态页面:

[root@hostapache2]# GET http://$(hostname -i)/server-status  | head -10
<?
    require('_config.php');
    $contactsData = simplexml_load_file(USE_CMS ? WEB_ROOT . 'wordpress/contacts' :        'data/contacts.xml');
    $downloadsData = simplexml_load_file(USE_CMS ? WEB_ROOT . 'wordpress/downloads' :      'data/downloads.xml');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

问题是我需要两全其美。我需要为具有基本身份验证的站点提供服务,我需要能够启用服务器状态。

我尝试通过为服务器状态提供自己的VHOST配置来解决这个问题,以便将服务器状态与具有基本身份验证的VHOST分开,如下所示:

<VirtualHost *>
ServerName host.west.company.com
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1 10.10.1.246
</Location>
</VirtualHost>

但我也没有运气。它只是提示输入用户名和密码。

1 个答案:

答案 0 :(得分:0)

在我阅读Apache文档之前,我遇到了同样的问题: http://httpd.apache.org/docs/2.2/en/vhosts/name-based.html

在那里你可以找到:

  

主要主人消失

     

如果要将虚拟主机添加到现有Web服务器,则必须执行此操作   还为现有主机创建一个块。该   此虚拟主机中包含的ServerName和DocumentRoot应该是   与全局ServerName和DocumentRoot相同。列出这个虚拟   首先在配置文件中托管,以便它充当   默认主机。

因此,如果您不进行此更改,则会丢失默认Web服务器,例如:

#>httpd -S
[root@localhost]# apachectl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server virtualhost.domain.com (/etc/httpd/conf/virtualhost.conf:4)
         port 80 namevhost virtualhost.domain.com (/etc/httpd/conf/virtualhost.conf:4)
Syntax OK

如果您想再次获取默认Web服务器(使用所有默认配置,例如/ server-status),您必须创建一个命名虚拟主机,如文档说明所示:

[root@localhost conf]# cat defaultserver.conf

# you can't get this directive inside the <VirtualHost> tag
ExtendedStatus On

<VirtualHost *:80>
   ServerAdmin admin@domain.com
   ServerName default.domain.com
   DocumentRoot "/etc/httpd/htdocs"

   # Real-time info on requests and configuration
   Include conf/extra/httpd-info.conf

</VirtualHost>

最后,您必须先在配置中包含默认虚拟主机:

[root@localhost conf]# cat virtualhosts.conf
NameVirtualHost *:80

include conf/defaultserver.conf
include conf/virtualhost.conf

重新启动Apache服务器,您可以验证配置:

[root@localhost]# apachectl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server default.domain.com (/etc/httpd/conf/defaultserver.conf:4)
         port 80 namevhost default.domain.com (/etc/httpd/conf/defaultserver.conf:4)
         port 80 namevhost virtualhost.domain.com (/etc/httpd/conf/virtualhost.conf:4)
Syntax OK