Apache 2.4 在同一端口上的多个虚拟主机
Posted
技术标签:
【中文标题】Apache 2.4 在同一端口上的多个虚拟主机【英文标题】:Several virtual hosts on the same port with Apache 2.4 【发布时间】:2016-05-02 07:32:48 【问题描述】:我正在尝试用 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 和 http://project2.dev 都指向 C:/wamp/www/myProject1/
与project2.dev
相关的第二条路径C:/wamp/www/myProject2/
似乎被忽略了。
我错过了什么吗?
谢谢。
【问题讨论】:
*:80
。不,您需要指定 主机。
每次发布新版本的 Apache 时,您如何处理虚拟主机都会不断变化。我预计它会在一周左右再次改变。您需要阅读当前版本的文档并严格遵守。您不能使用较旧或较新的文档,因为它的格式不正确。
\*:80
?尝试消除\
。您在NVH
指令中添加的内容必须与<VirtualHost>
行完全匹配...
@kainaw 我有 Apache 2.4.9,我读过的文档是我猜的好文档:httpd.apache.org/docs/2.4/vhosts/name-based.html
@MarcB 根据文档,\*
是指定所有 IP 地址的通配符。
【参考方案1】:
您尚未在任何地方定义http://project2.dev - 只是http://www.project2.dev。因此 Apache 默认回到第一个配置,因为它找不到匹配项。
将以下配置添加到第一个虚拟主机:
ServerAlias project1.dev
这与第二个类似:
ServerAlias project2.dev
然后重新启动 Apache。
【讨论】:
【参考方案2】:简单的答案是,从 Apache 2.4 开始,NameVirtualHost *:80
语法不再需要或允许!它会引发错误并导致 Apache 无法启动。 apache error log
查找错误会出现。
哦,NameVirtualHost \*:80
从来都不是对的!
所以只需完全删除 NameVirtualHost \*:80
行。
一旦您定义了虚拟主机,httpd.conf
中的 localhost 就会被忽略,因此您也应该在 httpd-vhost.conf
中定义它,否则其他 2 个 VH def 看起来不错,除了 ServerName
和缺少的 @ 987654330@ 和失踪的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>
引用:但是当我在重启 wamp 服务后进行测试时,http://project1.dev 和 http://project2.dev 都指向 C:/wamp/www/myProject1/
如果您的 VH 定义中有错误,Apache 将默认使用 httpd-vhosts.conf 中第一个正确定义的 VH,所以这可能会发生
至于您的HOSTS
文件,它应该包含对 IPV4 和 IPV6 堆栈的引用,尤其是当 windows 似乎越来越多地使用 IPV6 堆栈时,毕竟我们最终要移动到的地方,它不应该包含 @ 987654334@ 所以应该是这样的:-
#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 文件后,您要么需要重新启动,要么在使用“以管理员身份运行”启动的命令窗口中执行以下操作
net stop dnscache
net start dnscache
【讨论】:
以上是关于Apache 2.4 在同一端口上的多个虚拟主机的主要内容,如果未能解决你的问题,请参考以下文章