我们的服务器在端口 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
两个问题:
ServerAlias
不支持与VirtualDocumentRoot
- 相同的变量,该 vhost 的别名设置为字面上的%1.ourserver
。- 您对新虚拟主机的声明与指令不匹配
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>