我们有一台安装了 Apache 2.4.9 的新 Centos 服务器。我正在尝试让 vhost 工作。DNS 解析到正确的机器,我可以看到默认的 Apache 页面,所以这不是防火墙问题,Apache 正在运行。
/etc/httpd/conf/httpd.conf
Include conf.d/*.conf
/etc/httpd/conf.d/vhosts.conf
<VirtualHost *>
ServerName www.abctest.com
DocumentRoot /websites/abctest.com/htdocs
<Directory /websites/abctest.com/htdocs/public>
AllowOverride All
</Directory>
</VirtualHost>
/etc/httpd/模块
modules/mod_vhost_alias.so
网站
/websites/abctest.com/htdocs 中有一个 index.php 文件,其中包含 helloworld。重新启动 httpd 后,我仍然可以看到 Apache 页面,而不是 helloworld 文本。
我怎样才能让它工作?
答案1
尝试在每个 VirtualHost 块中放置一个特定的 IP 和端口。因此,请输入:
<VirtualHost 127.0.0.1:80>
答案2
您的VirtualHost
配置表明 apache 接受来自主机中任何接口的请求,但它应该有一个标Host: www.abctest.com
头来选择。通常,任何其他标头都会导致 apache 使用默认的 VirtualHost。DocumentRoot
/websites/abctest.com/htdocs
Host
如果您尝试使用 打开网页,http://localhost
那么您最终会获得默认页面DocumentRoot
。
您可以使用命令更轻松地检查这一点curl
。
curl -L 'http://www.abctest.com'
并且还要确保您www.abctest.com
在/etc/hosts
文件中有一个 IP 到主机的映射,如下所示。
127.0.0.1 www.abctest.com www
答案3
需要检查以下几项:
确保你没有其他虚拟主机随后可能被调用的条目。
通常,*
VirtualHosts 中的条目用于没有 ServerName 的请求,因此,尽管我期望它能起作用,但请尝试将第一行从:
<VirtualHost *>
到
<VirtualHost www.abctest.com:80>
(假设您使用主机的默认端口 80)。
除了这些随机项目之外,请查看您的 access_log 和 error_log。它们可以帮助您识别正在使用的路径,然后在 .conf 文件中定位,以帮助缩小冲突/原因的范围。
答案4
您需要启用基于名称的虚拟主机。
/etc/httpd/conf/httpd.conf
在我的 Centos 盒子上,它位于
# NameVirtualHost *:80
您需要从行首删除“#”符号以启用它,然后重新启动 Apache。
如果没有上述内容,Apache 将使用基于 IP 的虚拟主机。由于(我推测)您的主机名和虚拟主机名解析为相同的 IP 地址,因此第一个匹配的 IP 地址将获胜,在您的情况下,该 IP 地址是 Apache 起始页。