Apache 2.4 在同一个端口上的多个虚拟主机

Several virtual hosts on the same port with Apache 2.4

我正在尝试使用 Apache 2.4 中的虚拟主机(使用 Wampserver 2.5)做一些简单的事情

我希望能够拥有多个虚拟主机并通过以下方式访问它们:

所以我通过阅读 official guidehttpd.conf 中进行了以下配置:

NameVirtualHost \*:80

#
# Project 1
#

<VirtualHost *:80>
    DocumentRoot "C:/wamp/www/myProject1/"
    ServerName www.project1.dev
    ErrorLog "logs/project1-error_log "
    CustomLog "logs/project1-access_log" common
    <Directory "C:/wamp/www/myProject1/">
      AllowOverride all
      Require all granted
    </Directory>
</VirtualHost>

#
# Project 2
#

<VirtualHost *:80>
    DocumentRoot "C:/wamp/www/myProject2/"
    ServerName www.project2.dev
    ErrorLog "logs/project2-error_log "
    CustomLog "logs/project2-access_log" common
    <Directory "C:/wamp/www/myProject2/">
      AllowOverride all
      Require all granted
    </Directory>
</VirtualHost>

我也将它们添加到我的 hosts 文件中

127.0.0.1 http://project1.dev
127.0.0.1 http://project2.dev

但是当我在重启 wamp 服务后进行测试时,http://project1.dev and http://project2.dev 都指向 C:/wamp/www/myProject1/

project2.dev相关的第二个路径C:/wamp/www/myProject2/似乎被忽略了。

我是不是漏掉了什么?

谢谢。

您还没有定义http://project2.dev anywhere - just http://www.project2.dev。所以 Apache 默认回到第一个配置,因为它找不到匹配项。

将以下配置添加到第一个虚拟主机:

ServerAlias project1.dev

与第二个类似:

ServerAlias project2.dev

然后重启 Apache。

简单的答案是,从 Apache 2.4 开始,不再需要或不允许使用 NameVirtualHost *:80 语法!它会抛出错误并导致 Apache 无法启动。如果您查找,错误将出现在 apache error log 中。

哦,NameVirtualHost \*:80 从来都不对!

所以完全删除行 NameVirtualHost \*:80

一旦你定义了一个虚拟主机,httpd.conf 中的本地主机就会被忽略,所以你也应该在 httpd-vhost.conf 中定义它,否则其他 2 个 VH defs 看起来很好,除了ServerName 和缺失的 ServerAlias 以及缺失的 Options

<VirtualHost *:80>
    DocumentRoot "C:/wamp/www/"
    ServerName localhost
    <Directory "C:/wamp/www/">
      Options Indexes FollowSymLinks MultiViews
      AllowOverride all
      Require local
    </Directory>
</VirtualHost>


#
# Project 1
#

<VirtualHost *:80>
    DocumentRoot "C:/wamp/www/myProject1/"
    ServerName project1.dev
    ServerAlias www.project1.dev
    ErrorLog "logs/project1-error_log "
    CustomLog "logs/project1-access_log" common
    <Directory "C:/wamp/www/myProject1/">
      AllowOverride all
      Options Indexes FollowSymLinks MultiViews
      Require all granted
    </Directory>
</VirtualHost>

#
# Project 2
#

<VirtualHost *:80>
    DocumentRoot "C:/wamp/www/myProject2/"
    ServerName project2.dev
    ErrorLog "logs/project2-error_log "
    CustomLog "logs/project2-access_log" common
    <Directory "C:/wamp/www/myProject2/">
      AllowOverride all
      Options Indexes FollowSymLinks MultiViews
      Require all granted
    </Directory>
</VirtualHost>

Quote: 但是当我在重新启动 wamp 服务后进行测试时,两个 http://project1.dev and http://project2.dev 都指向 C:/wamp/www/myProject1/

如果您的 VH 定义有误,Apache 将默认使用 httpd-vhosts.conf 中第一个正确定义的 VH,这就是可能发生的情况

至于你的 HOSTS 文件,它应该包括对 IPV4 和 IPV6 堆栈的引用,特别是因为 windows 似乎越来越多地使用 IPV6 堆栈,毕竟我们要去的地方,最终,它不应该包括 httpd:// 所以它应该是这样的 :-

#IPV4 stack ip addresses
127.0.0.1 localhost
127.0.0.1 project1.dev
127.0.0.1 project2.dev

#IPV6 stack ip addresses
::1 localhost
::1 project1.dev
::1 project2.dev

更改 HOSTS 文件后,您需要重新启动,或者在命令 windows 中执行以下操作 "Run as Administrator"

net stop dnscache
net start dnscache