动态虚拟主机 (CNAME)

动态虚拟主机 (CNAME)

我已经动态配置了虚拟主机:

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)是符号链接创建。

相关内容