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

Gae*_*anZ 130 apache debugging virtualhost

再一次,我的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>
Run Code Online (Sandbox Code Playgroud)

并且不适用的虚拟主机配置是这样的:

<VirtualHost *:*>

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

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

sqr*_*ren 182

语法检查

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

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

# Debian-based (Ubuntu)
apache2ctl -t

# MacOS
apachectl -t
Run Code Online (Sandbox Code Playgroud)

列出虚拟主机

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

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

# Debian-based (Ubuntu)
apache2ctl -S

# MacOS
apachectl -S
Run Code Online (Sandbox Code Playgroud)

  • `-S`是`-t -D DUMP_VHOSTS`的同义词,所以这两个是相同的 (5认同)
  • 对于Windows(如果使用的是xampp),则在以下位置具有以下相同的命令:\ xampp \ apache \ bin (2认同)
  • 这是非常有用的,谢谢你,但这还不够,我在vhost上遇到了一些麻烦,它应该被使用而不是,我不知道为什么,我希望得到关于apache如何选择vhost的日志. (2认同)

小智 27

这是我认为可以提供一些帮助的命令:

apachectl -t -D DUMP_VHOSTS
Run Code Online (Sandbox Code Playgroud)

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

您还将知道每个vhost的声明位置.如果您的配置文件很乱,它可以很方便.;)


Mic*_*tor 23

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

httpd -S
Run Code Online (Sandbox Code Playgroud)

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

  • 在Apache2中,这是`apache2ctl -S` (9认同)

yoj*_*o87 11

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


Gre*_*Rox 10

我有一个新的VirtualHost配置文件,在使用该apachectl -S命令时没有显示.经过多次刮擦后,我意识到我的文件没有后缀".conf".一旦我用该后缀重命名了文件,我的Vhost开始显示并正常工作!


Jac*_*nkr 6

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

apache2ctl -S
Run Code Online (Sandbox Code Playgroud)

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


Kon*_*hev 5

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

在我更改了这两个之后,一切正常。有趣的是,apache 没有发出任何错误,只是没有在我的 Mac OS Sierra 上静默打开我的网站。