我已将 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 地址。