多个虚拟主机 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 证书时也包括所有这些作为服务器别名。
我希望任何域在我的虚拟主机上指向一个 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 证书时也包括所有这些作为服务器别名。