Apache2 虚拟主机损坏;在子域上显示默认 index.html,但 www.subdomain 上的内容正确

Apache2 虚拟主机损坏;在子域上显示默认 index.html,但 www.subdomain 上的内容正确

我已将 Linode 配置为 Ubuntu 10.04.2 Web 服务器,并安装 Apache 2.2.14。

我总共有 4 个网站,全部定义/etc/apache2/sites-available为虚拟主机。所有网站在配置上几乎都是相同的克隆。除最后一个网站外,所有网站都运行成功。

default:      (www.)exampleadnetwork.com
              (www.)example.com
          reseller.example.com
trouble:   client1.example.com

我每次访问该client1.example.com网站时都会看到这个页面:

有用!

这是该服务器的默认网页。

Web 服务器软件正在运行,但尚未添加任何内容。

在我的ports.conf文件中,我已将 NameVirtualHost 正确设置为端口 80 上的 IP 地址。

如果我访问“www.sub.example.com”别名,该网站就可以正常工作!如果我不使用 www 访问该网站,我会看到上面发布的“它有效”摘录。甚至apache2ctl -S显示我的 vhost 文件解析正确并添加到组合中。

我的vhost配置文件如下:

<VirtualHost 127.0.0.1:80>
    ServerAdmin [email protected]
    ServerName  client1.example.com
    ServerAlias client1.example.com www.client1.example.com
    DocumentRoot    /srv/www/client1.example.com/public_html/
    ErrorLog    /srv/www/client1.example.com/logs/error.log
    CustomLog   /srv/www/client1.example.com/logs/access.log combined

    <directory /srv/www/client1.example.com/public_html/>
        Options -Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </directory>
</VirtualHost>

其他网站是以下变体:

<VirtualHost 127.0.0.1:80>
    ServerAdmin [email protected]
    ServerName  example.com
    ServerAlias example.com www.example.com
    DocumentRoot    /srv/www/example.com/public_html/
    ErrorLog    /srv/www/example.com/logs/error.log
    CustomLog   /srv/www/example.com/logs/access.log combined
</VirtualHost>

唯一不同的网站是另一个子域名:

<VirtualHost 127.0.0.1:80>
    ServerAdmin [email protected]
    ServerName  reseller.example.com
    ServerAlias reseller.example.com
    DocumentRoot    /srv/www/reseller.example.com/public_html/
    ErrorLog    /srv/www/reseller.example.com/logs/error.log
    CustomLog   /srv/www/reseller.example.com/logs/access.log combined
</VirtualHost>

文件名是不带 www. 前缀的 FQDN。

我已经关注这个建议,但仍然无法正确访问子域。

答案1

我遇到了完全相同的问题,最终解决问题的方法是,通过从 sites-enabled 取消链接来禁用 apache 中的默认站点:

sudo unlink /etc/apache2/sites-enabled/000-default

完成此操作后,我的所有网站均正确显示。我发现这个问题已经很老了,但希望这可以帮助其他人。

答案2

其他海报的解决方案可以做到这一点。

显示“它有效”,因为所有虚拟主机都与本地主机匹配。如果您调用“client1.example.com”,apache 将跳过本地主机虚拟主机,如果没有匹配的虚拟主机,它将使用默认配置。

按照其他发帖者所说的做(将您的重要主机更改为或<VirtualHost *:80><VirtualHost *>您的默认虚拟主机更改为您喜欢的文档根目录。

不要忘记:即使你正确定义了你的 Vhosts,如果有人在没有主机名的情况下请求你的服务器(例如通过 ip 地址),服务器也会调用默认站点。

答案3

尝试一下,不要在 ServerName 和 ServerAlias 中存在重复的条目。

例如:

<VirtualHost *:80>
ServerAdmin [email protected]
ServerName  sub.example.com
ServerAlias www.sub.example.com
DocumentRoot    /srv/www/sub.example.com/public_html/
ErrorLog    /srv/www/sub.example.com/logs/error.log
CustomLog   /srv/www/sub.example.com/logs/access.log combined

<directory /srv/www/sub.example.com/public_html/>
    Options -Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</directory>

答案4

您是否检查过您网站的 DNS 解析度?

(www.)sub.example.com 都解析到同一台机器(即使地址不同)?

检查两个日志,查看所有访问是否都到达了正确的服务器(配置),或者是否到达了默认服务器,因为“它起作用了!”是默认配置的默认页面。

如果它们达到默认值,您必须确定为什么会这样...配置之间有什么区别。尝试更改 IP,如之前所建议的,因为 Apache 会将配置绑定到 VirtualHost 指令中指定的特定 IP 地址。

相关内容