Apache2 虚拟主机不工作

Apache2 虚拟主机不工作

运行 Ubuntu 12.04 LTS、Apache2.2.22。通过一个 IP 在家庭服务器上运行此程序。运行虚拟主机时出现问题。我在 godaddy 注册了一个域名。假设是 mysite.com,目标是拥有 www.mysite.com 和 test.mysite.com。目前只有 www.mysite.com 可以运行,如果我尝试 test.mysite.com,它会显示 www.mysite.com 的内容(我确实确保两个站点的内容不同)。我在 sites-available 中创建了两个文件并运行了相应的 A2ensite www.mysite.com 和 A2ensite test.mysite.com。以下是两个虚拟主机文件:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/test.mysite.com
    ServerName mysite.com
    ServerAlias test.mysite.com
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /var/test.mysite.com/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all         
    </Directory>

这是 www.mysite.com 虚拟主机文件:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www.mysite.com
    ServerName mysite.com
    ServerAlias www.mysite.com
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /var/www.mysite.com/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

在 GoDaddy 域名管理中,我有一个指向我的公共 IP 的 @,我有一个指向我的公共 IP 的 www 的“A”记录,我有一个指向公共 IP 的 test 的“A”记录。任何帮助我解决我做错的事情的人都将不胜感激。谢谢大家。

答案1

  1. 确保您已在以下位置启用虚拟主机httpd.conf

    NameVirtualHost *:80
    NameVirtualHost *:443
    
  2. ServerName每个VirtualHost指令都必须反映其将要服务的主机名。

    ServerAlias只应在必要时使用。它应是虚拟主机应响应的附加名称。它不应与 相同ServerName

    当没有其他匹配或客户端未提供 Host: 标头时,第一个VirtualHost指令将用作默认指令(旧版本的 HTTP 不需要此标头)。

  3. <Directory />指令可能应该在全局配置中,而不是在每个虚拟主机配置中重复。无论哪种方式都可以,我只是一个坚持干净配置的人。

确保在配置文件发生任何更改后重新启动 Apache。

编辑:
我看到了您的回复尝试,表明您收到一条错误消息,提示您未在 上配置 VirtualHosts *:80。您的虚拟主机位于包含文件中,因此出于某种原因,它必须包含在配置中。

我的第一个猜测是包含路径是错误的(虽然我认为它应该来自包,所以它应该是正确的 - 当然,各种 Linux 发行版使 Apache 变得如此复杂,以至于让我抓狂……但我离题了)。通常相对路径基于 Apache 的安装基础。由于我不确定这是否正确,而且它显然没有加载文件,您可能需要将其更改为绝对路径并查看会发生什么(即 /opt/apache22/enabled-sites,或系统上的任何内容)。

另外,您可以用标准哈希()注释掉那里的行#,然后添加您自己的行,这样就不会丢失原始配置。

答案2

对于test.mysite.com设置ServerNametest.mysite.com

答案3

由于我无法发表评论,我将更新修复问题的方法,以便其他人可能会觉得有用。这是用户错误。我忽略了检查 sites-enabled 文件夹以查看启用了哪些网站,而 test.mysite.com 不在那里。我运行了a2ensite test.mysite.com并重新启动 Apache,现在它可以正常工作了。

答案4

每个站点的正确配置应该是这样的

对于 test.mysite.com

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/test.mysite.com
    ServerName test.mysite.com
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /var/test.mysite.com/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all         
    </Directory>

对于 mysite.com

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www.mysite.com
    ServerName mysite.com
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /var/www.mysite.com/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

ServerAlias 的工作方式如下。

如果您希望同一个虚拟主机具有其他地址,则可以使用 ServerAlias 示例:

ServerName  mysite.com
ServerAl   www.mysite.com

相关内容