虚拟主机阻止服务器状态指令

虚拟主机阻止服务器状态指令

在我的 Ubuntu 16.4 VM 中,我已成功设置 Apache 2.4 并设置了多个虚拟主机。我想查看服务器状态,但我的第一个虚拟主机一直阻止我这样做。我反复阅读了有关此问题的 Apache 2.4 文档。我已将以下内容放入我的 /etc/apache2/apache.conf 中,然后放入 /etc/apache2/mods-enabled/status.conf 中,最后放入 /etc/apache2/sites-enabled/0firstvhost.conf 中

<Location "/server-status">
      SetHandler server-status
      Require ip 10.211.55.0/24
    </Location>

在阅读 Apache 文档和 ServerFault 中关于此主题的许多帖子时,我尝试了许多适用于 Apache 2.4 的变体

我可以通过在运行时查看 mod_status 来验证它是否正在运行

sudo apachectl -M | grep status

当然,我每次都检查了 apachectl configtest,并重新启动了 apache2 服务,看看是否可以浏览 10.211.55.3/server-status,但 Drupal PHP 应用程序一直在干扰。此虚拟主机的根目录中没有 .htaccess。

我已将此指令放在指令之内和之外。

我在浏览器中检查虚拟机的 IP 地址,并在虚拟机内运行

curl localhost/server-status
curl 10.211.55.3/server-status

Drupal 应用程序首先被读取。接下来该尝试什么?谢谢,sam

答案1

发现这个建议默认网站的 .htaccess 阻止了 mod_status无法正常工作。他们的解决方案对我来说不起作用,但由于我正在使用虚拟主机,所以我可以创建一个没有 .htaccess 的虚拟主机。我在 Debian 的 /etc/hosts 文件中添加了一个任意主机:

127.0.0.1  foo.org

在我的其他虚拟主机之间创建了一个空目录,并创建了一个新站点并启用了它。

<Directory /home/foo.org>
</Directory>
<Location /server-status>
    SetHandler server-status
    Require local
    Require ip 127.0.0.1
    Require ip ::1
</Location>

<VirtualHost *:80>
  ServerAdmin [email protected]
  ServerName foo.org
</VirtualHost>

因此在本地主机上我可以看到数据

curl foo.org/server-status

答案2

我也遇到了我的虚拟主机 /etc/sites-enabled/example.conf处理 http://localhost/server-info 的请求,我实际上希望由mod_info

# File /etc/sites-enabled/example.conf
<VirtualHost *:80>
  ServerName example.com
  
  # ...
</VirtualHost>

问题在于,在我看来,如果某个请求与任何配置不匹配,Apache 有一个默认的后备请求处理行为虚拟主机服务器名称(看12)。 作为mod_info的默认配置文件/etc/apache2/mods-available/info.load/etc/apache2/mods-available/info.conf不指定自己的虚拟主机服务器名称,我想 Apache 的后备机制已经发挥作用了,因为我的example.conf 虚拟主机处理 http://localhost/server-info 的请求。

我按照以下方式解决了该问题:

创建文件/etc/apache2/mods-available/localhost-server-info.load(注意mods-available)。 这是一个复制原文info.load

LoadModule info_module /usr/lib/apache2/modules/mod_info.so

创建文件/etc/apache2/sites-available/localhost-server-info.conf(注意sites-available)。这是原作的改编info.conf,将其内容包裹在虚拟主机并提供服务器名称

# Get mod_info information by requesting http://localhost/server-info
#
# Enable by executing
# service apache2 stop
# a2dismod info
# a2enmod localhost-server-info
# a2ensite localhost-server-info
# service apache2 start
#
# Disable by executing
# service apache2 stop
# a2dissite localhost-server-info
# a2dismod localhost-server-info
# service apache2 start

<IfModule mod_info.c>
  <VirtualHost *:80>
    # Adapt ServerName to your needs
    # Avoid ServerName collision with any other active VirtualHosts
    ServerName localhost

    <Location /server-info>
      SetHandler server-info
      # Adapt Require to your needs
      # Require local
      # Require ip 192.0.2.0/24
    </Location>
  </virtualHost>
</IfModule>

禁用原始信息模块(如果它仍然启用)并启用新的本地主机服务器信息模块地点:

service apache2 stop
a2dismod info
a2enmod localhost-server-info
a2ensite localhost-server-info
service apache2 start
  • http://example.com/server-info现在应该由示例.comVirtualHost(可能显示 404 页面)。
  • http://localhost/server-info 现在应该由mod_info
  • http://127.0.0.1/服务器信息以及其他未配置的服务器名称应该根据 Apache 的后备处理进行处理,例如在我的示例中示例.comVirtualHost(可能显示 404 页面)。

相关内容