我正在使用带有 Apache2 和多个 vhosts 的 Ubuntu Linux,它们位于/etc/apache2/sites-available
并从 进行符号链接(激活)/etc/apache2/sites-enabled
。Ubuntu 上的默认设置。
我想知道是否有可用于 Apache 的通用工具来列出所有 vhost 信息:
- 所有可用站点的列表
- 所有已启用站点的列表
- Apache 使用的所有已启用站点的列表(“重新加载”后启用的站点)
在这些列表中,我希望看到:
- 虚拟主机的域(和端口)。
- vhost 的目录。
- vhost 文件中是否存在(语法)错误。
显然我可以做一些 grepping、sed-ing 和 awking 来获取这些信息,但我很确定这之前已经在某个地方正确地完成了:)
答案1
我所知道的最接近的工具是apachectl -S
。
此命令将列出当前配置中定义的所有虚拟主机,无论 Apache 是否正在运行。信息包括 IP 地址、端口、ServerName 指令的值、配置文件名以及哪个虚拟主机是默认的。
这是一个通用的 Apache 工具,可以在 Redhat/CentOS、Mac OS X、Solaris 以及您喜欢的任何其他 Unix 上使用,因此它不知道基于 Debian 的 sites-available、sites-enabled、mods-available 和 mods-enabled 目录。
apachectl -S
没有列出 DocumentRoot 指令,因为它不是必需指令,并且可能不存在于某些虚拟主机中。它也没有列出任何 ServerAlias 指令,因为它们的数量可能不限。由于它们(以及 ServerName 指令)可以包含通配符,因此列出域可能会很麻烦。
apachectl -t
将进行语法检查。
根据您的版本,您可能必须使用apache2ctl -S
。
答案2
ls
我认为列出可用且已启用的站点可以在适当的目录中恢复使用。
这可能听起来很愚蠢,但想想你不能通过名称来信任一个文件:它的内容可能包含多个 VirtualHosts。
但是,如果您想显示 Apache 当前使用的配置,您可能需要查看该-S
标志。
以 root 身份登录后,这个命令行应该是一个很好的开始:
# source /etc/apache2/envvars && apache2 -S
来源:man apache2