多个虚拟主机 httpd 的多个别名

Multiple Aliases for Multiple vhosts httpd

我希望任何域在我的虚拟主机上指向一个 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>

您必须添加 ServerAlias 行

ServerName files.example.com 下方添加 ServerAlias files.domain.com

及以下 ServerName r.example.com 添加 ServerAlias r.domain.com

在您的情况下,apache 使用 files.example.com 作为默认虚拟主机,因为它是第一个。

我通过在我希望 ServerAlias 为 * 的 vhost 上设置专用 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>

这可能没有直接关系,但可能对其他人有帮助:您实际上可以将许多别名放在同一个虚拟主机条目中(在我的例子中是同一个域):

ServerName example.com
ServerAlias mail.example.com files.example.com r.example.com

并确保在为域创建 SSL 证书时也包括所有这些作为服务器别名。