Apache2 基于命名和基于 IP (SSL) 的 Apache2 和启用站点的方案

Apache2 基于命名和基于 IP (SSL) 的 Apache2 和启用站点的方案

使用一个 IP,如何设置两个域:

  1. *.foo.com 仅适用于端口 80 的名称。
  2. *.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 可以,这就是我同时使用两者的原因。

相关内容