我刚刚安装了 Apache 2.2,并尝试在同一服务器配置上托管两个域。我首先创建了一个虚拟主机 (一个),并调试了我的配置,以便它正常工作。当我尝试添加虚拟主机百科,并尝试访问它,我得到的只是 a.com 的正确页面。两个虚拟主机都指向同一个静态 IP 地址。服务器在 VPS 上运行 CentOS。
/usr/local/apache2/conf/httpd.conf
具有基本配置,部分包含在下面,但我有httpd.conf
Include
第二个文件,clients.conf
即Includes
每个站点的配置,位于不同网站的主目录中。(每个站点都有自己的帐户,目录为web
、scripts
、data
和config
。)
httpd.conf:
Listen 80
NameVirtualHost [ip]
# [...]
Include /usr/local/apache2/conf/clients.conf
客户端.conf:
Include /home/[a]/conf/apache/vhost.conf
Include /home/[b]/conf/apache/vhost.conf
/home/[a]/conf/apache/vhost.conf
<VirtualHost [ip]>
ServerName www.[a].com
ServerAlias [a].com
ServerAdmin [me]@[a].com
DocumentRoot /home/[a]/web/home
ErrorDocument 404 "http://www.[a].com/error/?404"
<Directory /home/[a]/web/home>
Options -Indexes FollowSymLinks
# Don't allow any .htaccess files
AllowOverride None
# Allow everyone to access
Order allow,deny
</Directory>
</VirtualHost>
/home/[b]/config/apache/vhost.conf
<VirtualHost [ip]>
ServerName www.[b].com
ServerAlias [b].com
ServerAdmin admin@[b].com
DocumentRoot /home/[b]/web/home
ErrorDocument 404 "http://www.[b].com/error/?/404/"
<Directory /home/[b]/web/home>
Options -Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost [ip]>
ServerName beta.[b].com
DocumentRoot /home/[b]/web/home
<Directory /home/[b]/web/home>
Options -Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
(抱歉,代码太多了,但我不知道需要多少。)
有人能看出我的代码有问题吗?我认为它看起来几乎与VirtualHost 示例(第一个),除了我扩展了“此处的其他指令”并使用了完整的 IP 地址,而不是通配符*
,这在示例下方的“注意:”中进行了描述。
编辑:
根据评论的建议,我尝试了apachectl -S
,得到了以下输出:
# /usr/local/apache2/bin/apachectl -S
VirtualHost configuration:
[ip] is a NameVirtualHost
default server www.[a].com (/home/[a]/conf/apache/vhost.conf:5)
port 80 namevhost www.[a].com (/home/[a]/conf/apache/vhost.conf:5)
Syntax OK
不应该[b].com
出现在这里吗?
答案1
未[b].com
显示表示[b]
未加载或未识别(通常是后者)。最常见的原因是 NameVirtualHost 中列出的 IP 与 中列出的 IP 不匹配<VirtualHost>
;这就是为什么*:80
通常建议使用的原因之一。
无论如何,有一个简单的测试来查看文件是否正在被加载:只需在[b].com
的配置文件中包含一个无效的配置命令,然后看看httpd -t
(或者service httpd configtest
,因为您在 CentOS 上)是否报告错误。
答案2
在尝试 BMDan 的建议时,我找到了解决问题的方法。我打开了clients.conf
,它应该是(并保存为)包含来自客户端a
和 的文件b
。相反,它只有 的包含a
。我不知道为什么它没有包含正确的数据,但我的 Apache 安装现在正常工作了。
我向所有帮助我解决这个问题的人表示感谢,如果这个问题是我的错误,我深表歉意。