多个虚拟主机 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 的多个别名的主要内容,如果未能解决你的问题,请参考以下文章

Apache虚拟主机配置(多个域名访问多个目录)

如何使用别名在 Apache 虚拟主机上配置多个 SSL 证书?

单个域上多个 laravel 应用程序的虚拟主机别名

Wildfly / Undertow:一台主机的多个别名

apache2虚拟主机实现一个服务器绑定多个域名

虚拟主机中的 Apache HTTPD 别名和目录