配置 Apache Mass Virtual Hosts 到不同的目录

配置 Apache Mass Virtual Hosts 到不同的目录

我们的服务器在端口 9000 上运行 Apache(因为 IIS 位于 80),并且我们有以下配置(vhosts.conf)来访问我们的网站:

NameVirtualHost *:9000
UseCanonicalName Off

<VirtualHost *:9000>
    ServerAlias %1.ourserver
    VirtualDocumentRoot D:/oursites/%1
    VirtualScriptAlias D:/oursites/%1
</VirtualHost>

这样我们就可以打开浏览器并通过 进行访问http://someclient.ourserver:9000/。到目前为止一切顺利。

现在我们正在安装一个新的服务器,Apache 将在端口 80 上运行,但我们需要特定网站将 移至VirtualDocumentRoot不同的驱动器/目录。我们尝试了类似以下操作(但没有成功):

NameVirtualHost *:80
UseCanonicalName Off

<VirtualHost specificsite.ourdomain.com:80>
    ServerAlias specificsite.ourdomain.com
    VirtualDocumentRoot C:/specificsite
    VirtualScriptAlias C:/specificsite
</VirtualHost>

<VirtualHost *:80>
    ServerAlias %1.ourserver
    VirtualDocumentRoot D:/oursites/%1
    VirtualScriptAlias D:/oursites/%1
</VirtualHost>

当我们测试时,结果是,http://specificsite.ourdomain.com/在浏览器上访问时,Apache 会尝试“重定向”到D:/oursites/specificsite,这是不正确的

访问http://someclient.ourserver/Apache 重定向正确地D:/oursites/someclient

那么我遗漏了什么? 看起来我忘记了一个小细节,导致所有请求都落在第二个 VirtualHost 上。

更多信息:

  • 运行 Xampp 1.7.7
  • Windows Server 2008 R2
  • DNS 管理上的两个条目:一个用于 *.ourserver,另一个用于 specificsite.ourdomain.com;
  • 使用的原因specificsite.ourdomain.com在于我们的客户可以访问托管在我们的服务器上的这个特定站点。

提前感谢你的帮助!

答案1

两个问题:

  1. ServerAlias不支持与VirtualDocumentRoot- 相同的变量,该 vhost 的别名设置为字面上的%1.ourserver
  2. 您对新虚拟主机的声明与指令不匹配NameVirtualHost,因此当请求进入该主机/端口组合时,不会对其进行检查。它使用 DNS 来查找要绑定的地址,因此它没有将动态虚拟主机离线这一事实意味着您的服务器可能位于 NAT 后面。

尝试这个:

NameVirtualHost *:80

# Put this one's configuration first, so that it's the default.
<VirtualHost *:80>
    # Add a ServerName directive so that it doesn't guess - it can be anything
    ServerName dynamic.filler.name
    ServerAlias *.ourserver
    VirtualDocumentRoot D:/oursites/%1
    VirtualScriptAlias D:/oursites/%1
</VirtualHost>

<VirtualHost *:80>
    ServerName specificsite.ourdomain.com
    VirtualDocumentRoot C:/specificsite
    VirtualScriptAlias C:/specificsite
</VirtualHost>

相关内容