在我的 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 有一个默认的后备请求处理行为虚拟主机的服务器名称(看1,2)。 作为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 页面)。