如何调试 Apache 虚拟主机配置?

我的 apache 虚拟主机配置再次出现问题。(使用默认配置而不是我的特定配置)。

问题不在于配置不当,而在于如何解决。

有没有人有好的建议来快速解决这类问题?

更多信息。

默认的 conf 文件是这样的:

NameVirtualHost *
<VirtualHost *>
ServerAdmin webmaster@localhost


DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>


ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>


ErrorLog /var/log/apache2/error.log


# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn


CustomLog /var/log/apache2/access.log combined
ServerSignature On


Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>


</VirtualHost>

不适用的虚拟主机配置如下:

<VirtualHost *:*>


ProxyPreserveHost On
ProxyPass / http://ip.ip.ip.ip:8088/
ProxyPassReverse / http://ip.ip.ip.ip:8088/
ServerName wiki.mydomain.com


</VirtualHost>
158678 次浏览

首先使用 apachectl configtest检查 配置文件中的语法错误,然后查看 apache 错误 日志

语法检查

检查配置文件是否存在语法错误:

# Red Hat-based (Fedora, CentOS), Arch-based and OSX
httpd -t


# Debian-based (Ubuntu)
apache2ctl -t


# MacOS
apachectl -t

列出虚拟主机

列出所有虚拟主机及其位置:

# Red Hat-based (Fedora, CentOS), Arch-based and OSX
httpd -S


# Debian-based (Ubuntu)
apache2ctl -S


# MacOS
apachectl -S

如果试图调试虚拟主机配置,可能会发现 Apache-S 命令行开关很有用。也就是说,键入以下命令:

httpd -S

这个命令将转储出 Apache 如何解析配置文件的说明。仔细检查 IP 地址和服务器名称可能有助于发现配置错误。(有关其他命令行选项,请参阅 httpd程序的文档)。

我想这个命令可能会有所帮助:

apachectl -t -D DUMP_VHOSTS

您将获得所有 vhost 的列表,您将知道哪个是默认的 vhost,并确保语法正确(与 yojimbo87建议的 apachectl configtest 相同)。

您还将知道每个 vhost 的声明位置

我最近在使用虚拟主机时遇到了一些问题。我使用 a2ensite来启用一个主机,但在运行重新启动之前(这将在失败时杀死服务器) ,我运行

apache2ctl -S

这会给你一些关于虚拟主机的信息,虽然不是很完美,但是很有帮助。

我有一个新的 VirtualHost 配置文件,它在使用 apachectl -S命令时没有显示。经过多次摸索,我意识到我的文件没有后缀”。会议”。一旦我重命名文件与后缀我的 Vhost 开始显示和工作!

我发现我自己的错误,我没有添加日志文件名: ErrorLog/var/log/apache2
这条路: 目录”/usr/share/doc/ 不包含网站来源。

我把这两个换了之后,都成功了。 有趣的是,Apache 没有发出任何错误,只是没有在 Mac OS Sierra 上静静地打开我的网站。

一个非常重要的工具是

apachectl -t -D DUMP_INCLUDES

它告诉我,我正在修复的文件 实际上是包含在一个本身没有包含的文件中。

谢谢大家