【问题标题】:Enabling virtual hosts in Apache makes every host forbidden (403)在 Apache 中启用虚拟主机会禁止所有主机 (403)
【发布时间】:2015-08-13 03:50:29
【问题描述】:

我在 Windows 8 上,刚刚在 C:/wamp 安装了 Wamp 2.5 (Apache 2.4.9) 以在本地测试我的代码。我在D:/workpace/project1 有我的源代码存储库,我使用 GIT 进行管理(GIT 是我不想打扰其位置的原因之一)。

安装 Wamp 后,我只是通过取消注释 httpd.conf 中的以下行来启用虚拟主机。

 #Include conf/extra/httpd-vhosts.conf

然后我前往conf/extra/httpd-vhosts.conf 创建了它的备份并创建了虚拟主机。

<VirtualHost *:80>
    ServerAdmin admin@example.com
    DocumentRoot "D:/workspace/project1/"
    ServerName project1
    ServerAlias p1
    ErrorLog "logs/project1(local)-error.log"
    CustomLog "logs/project1(local)-access.log" common
    <Directory "D:/workspace/project1/">
        Require all granted
    </Directory>
</VirtualHost>

还编辑了 hosts 文件并添加了必要的行。

127.0.0.1       project1
127.0.0.1       p1

问题是我收到403 Forbidden 错误不仅在我访问project1/p1/ 时,而且在我访问localhost/ 时。

当我通过注释禁用 httpd.conf 中的 httpd-vhosts.conf 时,

    Include conf/extra/httpd-vhosts.conf

我可以访问localhost/,但正如预期的那样,project1/p1/ 也解析为localhost/

令人惊讶的是,当我在httpd.conf 中重新启用httpd-vhosts.conf 并恢复原始(未更改)httpd-vhosts.conf 的备份时,即使在localhost/ 上我仍然得到403 (Forbidden)。但是当我再次禁用httpd-vhosts.conf 时,localhost/ 恢复正常。

更令人惊讶的是,如果我将DocumentRoot 更改为c:/wamp/www 中的一个虚拟文件夹,情况也是如此。所以这不仅仅发生在DocumentRootc:/wamp/www 之外。

我觉得我有一些额外的东西可以启用,因为我不可能搞砸任何东西,因为这是一个全新的安装,除了上面的那些我没有做任何更改。

Apache 无法与虚拟主机相处的原因可能是什么?

【问题讨论】:

  • 附注:为什么在本地使用虚拟主机?只需为每个项目创建一个Alias 就可以了。也不需要调整主机文件...
  • 对于虚拟主机问题本身:第一步总是是查看http服务器错误日志文件,尤其是在重启期间。那是服务器记录其配置问题的地方。在发出请求时还要监视该文件,您可能会发现有关问题的其他信息。您是否发现任何其他信息可能有助于解决您的问题?
  • @arkascha,奇怪!!! ...启用httpd-vhosts.conf 时,日志不会更新...project1(local)-error.logproject1(local)-access.log 也没有创​​建。
  • 啊,那么很可能名称解析不起作用,您的浏览器会尝试访问任何内容。首先使用 telnet 实用程序进行检查,最简单的方法是:telnet project1 80 - 会发生什么?
  • @arkascha,我在哪里可以找到它...?我已经更新了hosts 文件...

标签: virtualhost wampserver apache2.4


【解决方案1】:

有些事情你没有考虑到。

当您创建虚拟主机时,Apache 会忽略 httpd.conf 中定义的主机,因此您还需要为localhost 创建一个虚拟主机。这解释了为什么您在激活虚拟主机后无法访问localhost

Apache 支持 IPV4 和 IPV6,因此当您在 HOSTS 文件中创建域名时,您需要同时为 IPV4 和 IPV6 堆栈这样做。所以你需要有一个这样的 HOSTS 文件:-

#IPV4 Stack
127.0.0.1  localhost
127.0.0.1  project1

#IPV6 Stack
::1 localhost
::1 project1

浏览器会随意决定是使用 IPV4 堆栈还是 IPV6 堆栈。希望我明白为什么以及出于什么原因它使这个决定变得更好,但基本上当您输入域名时,浏览器或网络堆栈会选择 IPv4 或 IPv6 作为您与域的第一次联系,然后坚持该决定,但它两者都可以。

这是should help you create Virtual Hosts的帖子

【讨论】:

    猜你喜欢
    • 2015-08-26
    • 2015-12-30
    • 2013-07-12
    • 2018-01-03
    • 2019-10-01
    • 2010-09-16
    • 1970-01-01
    • 2014-10-10
    • 2011-10-16
    相关资源
    最近更新 更多