我有一台安装了传统 LAMP 的 Ubuntu 10.04 LTS 机器。我创建了两个网站:
一个公共网站,网址为 www.mysite.com
目前开放的“私人”网站,网址为 private.mysite.com
我为它们创建了两个不同的配置文件,
/etc/apache/sites-available/mysite
/etc/apache/sites-available/private-mysite
使用默认的 Apache 虚拟主机配置。没有通配符,ServerName 分别是 www.mysite.com 和 private.mysite.com,我没有使用通配符。
当然,还有指向 /sites-enabled 的符号链接。每个站点都有自己的目录,
/var/www/我的网站
/var/www/private-mysite
公共站点是一个 WordPress 博客。私人站点是一个包含多个 php 文件的 webapp。
一切都应该没问题,我已经检查了好几次,但奇怪的事情发生了。当我访问 private.mysite.com 时,私人部分一切正常。
但是当我访问 www.mysite.com 时,服务器直接转到 private.mysite.com。
Apache 日志显示对 www.mysite.com 的请求甚至没有被记录
/var/www/mysite/logs/access.log (或 error.log)
他们反而
/var/www/private-mysite/logs/access.log
因此,每个请求都会转到子域。有什么办法可以纠正此行为吗?
***************************** 更新 **********************************
更多信息:
ls -l /etc/apache2/sites-available/
-rw-r--r-- 1 root root 859 2011-05-27 13:33 private-mysite
-rw-r--r-- 1 root root 948 2010-11-18 22:16 default
-rw-r--r-- 1 root root 7467 2010-11-18 22:16 default-ssl
-rw-r--r-- 1 root root 264 2011-05-27 14:22 mysite
/etc/apache2/sites-available/private-mysite 内容:
<VirtualHost x.x.x.x:80>
ServerName private.mysite.com
DocumentRoot /var/www/private-mysite/html/
ErrorLog /var/www/private-mysite/logs/error.log
CustomLog /var/www/private-mysite/logs/access.log combined
</VirtualHost>
/etc/apache2/sites-available/mysite 内容:
<VirtualHost x.x.x.x:80>
ServerName www.mysite.com
ServerAlias mysite.com
DocumentRoot /var/www/mysite/
ErrorLog /var/www/mysite/logs/error.log
CustomLog /var/www/mysite/logs/access.log combined
</VirtualHost>
答案1
主机VirtualHost
定义块需要与NameVirtualHost
指令匹配。它可能位于 中/etc/apache2/ports.conf
,并且可能设置为*:80
。
要解决此问题,请更改您的NameVirtualHost
:
NameVirtualHost x.x.x.x:80
或者改变你的VirtualHost
定义:
<VirtualHost *:80>
答案2
请发布配置文件本身和ls -l /etc/apache/sites-available
。重新启动 Apache 时是否看到任何错误或警告?
发生这种情况可能是因为 www.mysite.com 由于某种原因不匹配,所以 Apache 使用 private.mysite.com 作为默认虚拟主机(因为它是唯一存在的)。