Apache 2.4 在同一个端口上的多个虚拟主机
Several virtual hosts on the same port with Apache 2.4
我正在尝试使用 Apache 2.4 中的虚拟主机(使用 Wampserver 2.5)做一些简单的事情
我希望能够拥有多个虚拟主机并通过以下方式访问它们:
- www.project1.dev
- www.project2.dev
所以我通过阅读 official guide 在 httpd.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
我正在尝试使用 Apache 2.4 中的虚拟主机(使用 Wampserver 2.5)做一些简单的事情
我希望能够拥有多个虚拟主机并通过以下方式访问它们:
- www.project1.dev
- www.project2.dev
所以我通过阅读 official guide 在 httpd.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