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


138

我的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>

Answers:


198

语法检查

要检查配置文件中的语法错误:

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

# Debian-based (Ubuntu)
apache2ctl -t

# MacOS
apachectl -t

列出虚拟主机

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

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

# Debian-based (Ubuntu)
apache2ctl -S

# MacOS
apachectl -S

5
-S是的代名词-t -D DUMP_VHOSTS所以这两个是相同的
aron.duby

2
对于Windows,(如果您使用的是xampp),则在以下位置具有相同的命令:\ xampp \ apache \ bin
Jahmic 2015年

对于c:\\wamp\\bin\\apache\\apache2.4.9\\bin\\httpd.exe -S
Wamp

2
这非常有用,谢谢,但还不够,我在使用虚拟主机时遇到了麻烦,应该使用它,但不是,我不知道为什么,我希望获得有关如何选择虚拟主机的日志。
Loenix

1
当虚拟主机或主要主机的实际访问进入时,提供任何有关所选主机的动态信息时,有什么方法可以使Apache向错误文件或其他位置添加消息?我已经尝试过LoadModule log_debug_module modules / mod_log_debug.so ... LogMessage“ Debug 1” hook = all
David Spector

28

这是我认为可能会有帮助的命令:

apachectl -t -D DUMP_VHOSTS

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

您还将知道每个虚拟主机的声明位置。如果您的配置文件混乱,可能会很方便。;)


24

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

httpd -S

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


9
在Apache2中,这是apache2ctl -S
artfulrobot

1
或替代APACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data /usr/sbin/apache2 -S
rleir

12

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


我没有语法错误,因为服务器重新启动并重新加载配置没有任何问题。我不知道在哪个日志中可以找到有关我的配置的详细信息。
GaetanZ 2011年

错误日志通常位于“ /var/log/apache2/error.log”文件中。
yojimbo87 2011年

您也可以使用“ apache2ctl -t”。
拉里·西尔弗曼

11

我有一个新的VirtualHost配置文件,使用该apachectl -S命令时未显示。经过一番摸索后,我意识到我的文件没有后缀“ .conf”。在使用后缀重命名文件后,我的Vhost开始显示并开始工作!


8

我最近在VirtualHost上遇到了一些问题。我曾经a2ensite启用过主机,但是在运行重新启动(失败后会杀死服务器)之前,我运行了

apache2ctl -S

这为您提供了有关虚拟主机的最新信息。这不是完美的,但有帮助。


3

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

在我更改了这两个之后,所有方法都起作用了。有趣的是,apache并没有发出任何错误,只是没有在Mac OS Sierra上以静默方式打开我的网站。


好答案,帮我找到类似的问题。所有语法和-S虚拟主机均正确,但仍然为错误的站点提供服务。原来是:80和:443具有相同的访问日志文件,这似乎使事情变得混乱。每个端口使用单独的文件,站点开始工作。
David McNeill
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.