我在试图弄清楚这一点时遇到了很大的困难,所以请帮助我。
我已经配置了几个虚拟主机,并使用 Debian 默认方式配置虚拟主机。
2 个文件夹
- 可用站点
- 已启用站点
并且一些文件被符号链接到已启用站点,ln -s ...
并且在此步骤中,我将文件重命名为具有权重,200-... 300-... 以获得优先级。
当我尝试配置一组虚拟主机时:
<VirtualHost test.host.priv:80>
ServerName test.host.priv
DocumentRoot "/htdocs/Private/web/production/somedomain/web"
</VirtualHost>
<VirtualHost host.com:80>
ServerName host.com
ServerAlias www.host.com
DocumentRoot "/htdocs/Private/web/production/somedomain/web"
</VirtualHost>
现在我有几个这样的,还有一些*:80
。但是我如何确保它们只监听我指定的服务器名称?因为 apache 开始将它们用作通配符等。在这种情况下,如果未在更高优先级的文件中配置,则每个域都默认返回到 test.host.priv。我不想要那样,我试过使用*:80
,test.host.priv:80
但它根本不在乎,它仍然默认为此,因此任何未指定的子域都会进入这里。
任何建议都很好!
/马库斯
答案1
Apache 通过与 VHosts 匹配ServerName
以及ServerAlias
何时NameVirtualHost
在特定的 Listener 上处于活动状态,我想这就是您在这里所缺少的。
使用 Debian 时,您将拥有一个ports.conf
默认的,Listen 80
这意味着在所有可用接口上监听端口 80。然后,您可以使用NameVirtualHost *:80
并编写主机,如下所示:
<VirtualHost *:80>
ServerName test.host.priv
DocumentRoot "/htdocs/Private/web/production/somedomain/web"
</VirtualHost>
<VirtualHost *:80>
ServerName host.com
ServerAlias www.host.com
DocumentRoot "/htdocs/Private/web/production/somedomain/web"
</VirtualHost>
你可以按照你喜欢的方式改变它,只是之前<VirtualHost [something]:[someport]>
需要一个“匹配” 。NameVirtualHost [something]:[someport]
看http://httpd.apache.org/docs/2.2/mod/core.html#NameVirtualHost了解详情。