使用一个 IP,如何设置两个域:
- *.foo.com 仅适用于端口 80 的名称。
- *.bar.com 捕获对 IP 或 *.bar.com 发出的所有 80 和 443 请求
我可以使用 sites-enabled 方案来做到这一点吗?
更新以使这一点更清楚,我想我可能夸大了我的要求:
If http.header.host == ^.*?.foo.com:
then serve('/var/www/foo');
else if tcp.port == 443:
serve.ssl('/var/www/bar');
else
serve('/var/www/bar')
fi
答案1
当然,启用 sites-enabled 后,Apache 会将该文件中的所有内容作为配置的一部分进行读取。您可以在一个文件中拥有多个虚拟主机。您可以在 apache2.conf 中拥有所有虚拟主机,而在 sites-enabled 中不包含任何内容。您可以将所有虚拟主机放在 conf.d 中。与 sites-enabled 的唯一区别在于 a2ensite 命令知道将文件符号链接到 sites-available。
至于你的问题:
你可以有:
NameVirtualHost *:80
NameVirtualHost *:443
<Virtualhost *:80>
ServerName www.foo.com
ServerAlias *.foo.com
...
</VirtualHost>
<Virtualhost *:80>
ServerName www.bar.com
ServerAlias *.bar.com
...
</VirtualHost>
<Virtualhost *:443>
ServerName www.bar.com
ServerAlias *.bar.com
SSLEngine on
...
</VirtualHost>
<Virtualhost 12.34.56.78:80>
ServerName www.bar.com
ServerAlias *.bar.com
...
</VirtualHost>
<Virtualhost 12.34.56.78:443>
ServerName www.bar.com
ServerAlias *.bar.com
SSLEngine on
...
</VirtualHost>
您将需要拥有 *.bar.com 的通配符 SSL 证书,并且您只能在服务器上使用一个 SSL 证书,而不是每个 IP 地址一个。
ServerName 不支持通配符,但 ServerAlias 可以,这就是我同时使用两者的原因。