我知道可以在 apache ServerAlias 上使用通配符。我尝试配置 3 组,但配置会退回到一个虚拟主机,而不是每个单独的虚拟主机。
开发环境
ServerName dev.somedomain.com
ServerAlias dev.*.somedomain.com
docroot /var/www/dev.somedomain.com
发布环境
ServerName release.somedomain.com
ServerAlias release.*.somedomain.com
docroot /var/www/release.somedomain.com
生产环境
ServerName somedomain.com
ServerAlias www.somedomain.com *.somedomain.com www.*.somedomain.com
docroot /var/www/somedomain.com
但当我浏览 dev.test.somedomain.com 时,我得到的是 somedomain.com 的内容(而不是 dev.somedomain.com)。我在这里遗漏了什么?
答案1
正如我在评论中所说,您可以通过更改 Apache 配置中的 VirtualHosts 顺序来解决此问题。由于这是不可能的,我将向您指出 3 种替代方案:
使用mod_vhost_alias。这也许不是一个选择,但仍然如此。
为生产/开发/发布使用单独的 IP 地址。如果您在内部网络/NAT 后面,这应该相对容易。
在 Apache 中为每个 VHost 使用单独的端口,并将 HAProxy 实例放在重定向到正确端口的同一台服务器上。在 HAProxy 中,您可以更好地对 Host 标头进行正则表达式匹配。