我已经动态配置了虚拟主机:
UseCanonicalName Off
<VirtualHost *:80>
ServerAlias *.projects.domain.com
VirtualDocumentRoot /var/www/projects/%-4
</VirtualHost>
<VirtualHost *:80>
ServerAlias *.testing.domain.com
VirtualDocumentRoot /var/www/testing/%-4
</VirtualHost>
当我在浏览器中输入时它工作正常xxx.projects.domain.com或者yyy.testing.domain.com但:
它不适用于 CNAME 记录。例如:xyz.com => abc.projects.domain.com。
如何配置 apache 根据解析的 DNS 名称动态选择虚拟主机(abc.projects.domain.com)并且不符合 HTTP HOST 标头(xyz.com)无需插入xyz.com到 apache 配置?
答案1
它不适用于 CNAME 记录。
CNAME 仅告诉它使用与目标相同的 DNS 记录,它不会告诉您的 HTTP 服务器(Apache),当它看到 CNAME 域时应该将其与 CNAME 目标相同地对待。
有几个选项,但本质上您需要以某种方式指定 xyz.com 是 abc.projects.domain.com 的别名。
有几种选择此处列出这可能对你有用。例如,请参阅“使用单独的虚拟主机配置文件”。
我遇到过类似的情况,最后我只是使用 Chef 为我的所有域(包括它们的别名)生成了正确的 vhost 配置。我发现这比尝试动态执行更简单、更可靠。
答案2
如果你不喜欢重复的 VirtualHost 配置,那么还有另一种选择符号链接。
对于你的每一个项目或者测试创建到相应客户域的符号链接,例如
ln -l /var/www/projects/abc /var/www/links/xyz.com
ln -l /var/www/projects/abc /var/www/links/abc.projects.domain.com
然后按以下方式配置 VirtualHost:
<VirtualHost *:80>
ServerAlias *.projects.domain.com
VirtualDocumentRoot /var/www/links/%0
</VirtualHost>
因此,您的网站将同时使用 xyz.com 和 abc.projects.domain.com 访问。您唯一需要做的必须实现自动化(例如通过 cron)是符号链接创建。