如何使用虚拟主机在 Apache 上运行多个项目?

Posted

技术标签:

【中文标题】如何使用虚拟主机在 Apache 上运行多个项目?【英文标题】:how to run multiple projects on Apache using Virtual Hosts? 【发布时间】:2015-01-30 10:21:26 【问题描述】:

我的虚拟主机是:

# for localhost to work properly
<VirtualHost *:1983>
  ServerAdmin admin@localhost
  DocumentRoot "d:/wamp/www"
  ServerName localhost
</VirtualHost>
# - See more at: http://yogeshchaugule.com/blog/2014/how-setup-virtual-hosts-wamp#sthash.zVhOHBlJ.dpuf
# - @: http://www.techrepublic.com/blog/smb-technologist/create-virtual-hosts-in-a-wamp-server/
# - @: http://www.kristengrote.com/blog/articles/how-to-set-up-virtual-hosts-using-wamp (maybe out of usable scope)

# afm : Agile Farm Manager
#<VirtualHost *:1983>
#    DocumentRoot "D:/projects/afm/Code"
#    ServerName  dafm.dev
#    <Directory "D:/projects/afm/Code">
# Order allow,deny
# Allow from all
# AllowOverride All
#    </Directory>
#</VirtualHost>

# mrs : Meeting Request System
<VirtualHost mrs.dev:1983>
    DocumentRoot "D:/wamp/www/mrs_site/mrs"
    ServerName  mrs.dev
    ServerAlias mrs.dev
    <Directory "D:/wamp/www/mrs_site/mrs">
 Order allow,deny
 Allow from all
 AllowOverride All
    </Directory>
</VirtualHost>

# dtk : Kit Designer
<VirtualHost dtk.dev:1983>
    DocumentRoot "D:/wamp/www/designertoolkit/"
    ServerName  dtk.dev
    ServerAlias dtk.dev
    <Directory "D:/wamp/www/designertoolkit/">
 Order allow,deny
 Allow from all
 AllowOverride All
    </Directory>
</VirtualHost>

我的 windows 的 hosts 文件有以下映射

#VIRTUAL DOMAINS

127.0.0.1   dafm.dev
127.0.0.1   mrs.dev
127.0.0.1   dtk.dev

我配置的端口是:1983,所以我访问 wamp,例如:http://localhost:1983/

http://mrs.dev:1983/ 转到我当前的项目。但我的其他项目无法再访问了。

就像当我去dtk.dev:1983/ 去同一个项目http://mrs.dev:1983/ 为每个有效的wamp 服务器请求。

我需要同时在 WAMP 上运行多个项目。虚拟主机有什么问题?

请帮忙

【问题讨论】:

我也已经根据这些链接为 wamp 启用了vhost_alias_module:-查看更多信息:yogeshchaugule.com/blog/2014/…#-@:techrepublic.com/blog/smb-technologist/…#-@:kristengrote.com/blog/articles/…(可能超出可用范围) 【参考方案1】:

您需要使用 NameVirtualHost。参见 Apache 手册:http://httpd.apache.org/docs/current/vhosts/name-based.html

像这样:

NameVirtualHost *:80

<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>

<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>

也许这行得通:

NameVirtualHost *:1983

# for localhost to work properly
<VirtualHost *:1983>
  ServerAdmin admin@localhost
  DocumentRoot "d:/wamp/www"
  ServerName localhost
</VirtualHost>

# mrs : Meeting Request System
<VirtualHost *:1983>
    DocumentRoot "D:/wamp/www/mrs_site/mrs"
    ServerName  mrs.dev
    ServerAlias mrs.dev
</VirtualHost>

# dtk : Kit Designer
<VirtualHost *:1983>
    DocumentRoot "D:/wamp/www/designertoolkit/"
    ServerName  dtk.dev
    ServerAlias dtk.dev
</VirtualHost>

<Directory "D:/wamp/www/designertoolkit/">
    Order allow,deny
    Allow from all
    AllowOverride All
</Directory>

<Directory "D:/wamp/www/mrs_site/mrs">
     Order allow,deny
     Allow from all
     AllowOverride All
</Directory>

【讨论】:

NameVirtualHost 指令是对的,但必须在每个 &lt;VitualHost&gt; 定义之前重复。下面我将发布答案和新的工作代码。 你测试我发布的配置了吗?我很确定它会以这种方式工作。 如果你使用我的配置,你不需要为每个虚拟主机添加NameVirtualHost 指令。 NameVirtualHost 将定义给定的 IP 地址以用于命名的虚拟主机。请参阅此处:httpd.apache.org/docs/current/mod/core.html#namevirtualhost 不建议在 NameVirtualHost 中使用 DNS 名称。 我先测试了您的配置,但没有成功。所以我开始寻找我自己的黑客。它发挥了魔力。我正在运行 Windows 7 Ultimate 和 WAMP。尽管 WAMP、MAMP、LAMP 或 XAMPP 并不重要,因为它们是基本的 Apache 指令。 我的目的是通过为每个项目创建一个名为vhost 的命名vhost,以便能够在我的单个本地主机安装*AMP 上运行/访问多个项目以便于测试。这就是我通过自己的 hack 实现的。但我仍然感谢你,@LucasF,因为你指出我首先要使用 NameVirtualHost 指令。【参考方案2】:

感谢匿名@user4311956 的回答指出NameVirtualHost 指令很重要。

但是通过我自己的测试,我发现如果我在创建每个虚拟主机之前提到 NameVirtualHost 指令,它会起作用,否则会失败。

这里是 httpd-vhosts.conf 文件的代码,它发挥了魔力:

#
# Use name-based virtual hosting.
#
NameVirtualHost *:1983

# for localhost to work properly
<VirtualHost *:1983>
  ServerAdmin admin@localhost
  DocumentRoot "d:/wamp/www"
  ServerName localhost
</VirtualHost>
# - See more at: http://yogeshchaugule.com/blog/2014/how-setup-virtual-hosts-wamp#sthash.zVhOHBlJ.dpuf
# - @: http://www.techrepublic.com/blog/smb-technologist/create-virtual-hosts-in-a-wamp-server/
# - @: http://www.kristengrote.com/blog/articles/how-to-set-up-virtual-hosts-using-wamp (maybe out of usable scope)

# afm : Agile Farm Manager
#<VirtualHost *:1983>
#    DocumentRoot "D:/projects/afm/Code"
#    ServerName  dafm.dev
#    <Directory "D:/projects/afm/Code">
# Order allow,deny
# Allow from all
# AllowOverride All
#    </Directory>
#</VirtualHost>
NameVirtualHost mrs.dev:1983
# mrs : Meeting Request System
<VirtualHost *:1983>
    DocumentRoot "D:/wamp/www/mrs_site/mrs"
    ServerName  mrs.dev
</VirtualHost>
NameVirtualHost dtk.dev:1983
# dtk : Kit Designer
<VirtualHost *:1983>
    DocumentRoot "D:/wamp/www/designertoolkit/"
    ServerName  dtk.dev
</VirtualHost>

再次感谢@user4311956 的回答为我指明了正确的方向。

【讨论】:

您应该只需要&lt;NameVirtualHost *:1983&gt; 参数一次。事实上,如果你使用的是 Apache 2.4.x,它实际上不再是一个有效的参数了。 我的服务器正在运行: Windows 7 Ultimate Apache 版本:2.2.22 php 版本:5.4.3 但是我需要找到一种方法来配置我的本地服务器以运行通过命名虚拟主机为每个项目创建多个项目。所以我已经完成了我一直在寻找的东西。因此,推荐什么配置和不推荐什么配置都没有关系。在发布到 StackOveflow 之前,我测试了很多配置。 -- 有了上面发布的我的这个config,我可以通过url http://localhost:1983/designertoolkit/ 以及这个虚拟主机http://dtk.dev:1983 访问项目dtk

以上是关于如何使用虚拟主机在 Apache 上运行多个项目?的主要内容,如果未能解决你的问题,请参考以下文章

配置apache虚拟主机,实现在一台服务器上运行多个网站

为多个域部署Apache Tomcat的WAR文件

如何在运行 Ubuntu 的 AWS EC2 上配置多个虚拟主机? [关闭]

在 Mint 15 上使用 Apache2 设置多个虚拟主机时出错

在本地运行多个网站 Apache PHP Ubuntu

在一台 Apache 服务器上的单独虚拟主机中运行 Apache mod_php 和 mod_fastcgi