多个虚拟主机 httpd 的多个别名
Posted
技术标签:
【中文标题】多个虚拟主机 httpd 的多个别名【英文标题】:Multiple Aliases for Multiple vhosts httpd 【发布时间】:2015-11-24 05:00:25 【问题描述】:我希望任何域都在我的虚拟主机上指向一个 CNAME
ServerAlias *
在我的虚拟主机中,但如果我将它添加到指向第二个虚拟主机的 CNAME 中,它只能与一个虚拟主机一起使用,它提供来自第一个虚拟主机的内容。
e.g:
1st: files.domain.com CNAME to files.example.com
2nd: r.domain.com CNAME to r.example.com
但第二个也在提供 files.example.com
我的 httpd.conf 有这两个虚拟主机
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot /var/www/files.example.com
ServerName files.example.com
ErrorLog /var/www/files.example.com/logs/error_log
CustomLog /var/www/files.example.com/logs/custom_log common
<Directory "/var/www/files.example.com">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot /var/www/r.example.com
ServerName r.example.com
ErrorLog /var/www/r.example.com/logs/error_log
CustomLog /var/www/r.example.com/logs/custom_log common
<Directory "/var/www/r.example.com">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
【问题讨论】:
【参考方案1】:这可能没有直接关系,但可能对其他人有帮助:实际上,您可以将许多别名放在同一个虚拟主机条目中(在我的情况下是同一个域):
ServerName example.com
ServerAlias mail.example.com files.example.com r.example.com
并确保在为域创建 SSL 证书时也将所有这些都包含为服务器别名。
【讨论】:
【参考方案2】:我通过在我希望 ServerAlias 为 * 的虚拟主机上设置一个专用 ip 解决了这个问题,并且它起作用了
<VirtualHost 192.168.1.55:80>
ServerAdmin admin@example.com
DocumentRoot /var/www/r.example.com
ServerName r.example.com
ServerAlias *
ErrorLog /var/www/r.example.com/logs/error_log
CustomLog /var/www/r.example.com/logs/custom_log common
<Directory "/var/www/r.example.com">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
【讨论】:
【参考方案3】:您必须添加 ServerAlias 行
在ServerName files.example.com
下方添加ServerAlias files.domain.com
ServerName r.example.com
以下添加ServerAlias r.domain.com
在您的情况下,apache 使用 files.example.com 作为默认虚拟主机,因为它是第一个。
【讨论】:
它仅适用于给定的 ServerAlias。但我希望任何域都指向 CNAME。 CNAME 和 Vhost 完全分开。 Apache 不知道您是否将 CNAME 添加到 DNS。您可以将 *.domain.com CNAME 添加到 files.example.com,然后首先在 apache 中定义默认虚拟主机,然后在其他类似 file.domain.com 中定义虚拟主机。然后,您将在 files.domain.com 以外的所有其他域中获得默认虚拟主机 好吧,我通过为该虚拟主机分配一个单独的 ip 并在 ServerAlias 中使用 * 来让它工作。它按我的预期工作以上是关于多个虚拟主机 httpd 的多个别名的主要内容,如果未能解决你的问题,请参考以下文章