最后我将 apache2 设置为为所有子域名获取单一证书。
[...]
# Go ahead and accept connections for these vhosts
# from non-SNI clients
SSLStrictSNIVHostCheck off
# Apache setup which will listen for and accept SSL connections on port 443.
Listen 443
# Listen for virtual host requests on all IP addresses
NameVirtualHost *:443
# Because this virtual host is defined first, it will
# be used as the default if the hostname is not received
# in the SSL handshake, e.g. if the browser doesn't support
# SNI.
<VirtualHost *:443>
ServerName domain.localhost
DocumentRoot "/Users/<my_user_name>/Sites/domain/public"
<Directory "/Users/<my_user_name>/Sites/domain/public">
Order allow,deny
Allow from all
</Directory>
# SSL Configuration
SSLEngine on
...
</VirtualHost>
<VirtualHost *:443>
ServerName subdomain1.domain.localhost
DocumentRoot "/Users/<my_user_name>/Sites/subdomain1/public"
<Directory "/Users/<my_user_name>/Sites/subdomain1/public">
Order allow,deny
Allow from all
</Directory>
# SSL Configuration
SSLEngine on
...
</VirtualHost>
<VirtualHost *:443>
ServerName subdomain2.domain.localhost
DocumentRoot "/Users/<my_user_name>/Sites/subdomain2/public"
<Directory "/Users/<my_user_name>/Sites/subdomain2/public">
Order allow,deny
Allow from all
</Directory>
# SSL Configuration
SSLEngine on
...
</VirtualHost>
例如,我可以正确访问
https://subdomain1.domain.localhost
https://subdomain2.domain.localhost
...
无论如何,现在我无法访问
http://subdomain1.domain.localhost
http://subdomain2.domain.localhost
...
由于我使用 Mac Os,因此在访问“http:版本”时,我得到一个默认页面“你的网页。“(而不是错误)。为什么会发生这种情况?
答案1
为了http://foo你需要其他虚拟主机
<VirtualHost *:80>
你有吗?
http://www.foo.com和https://www.foo.com是不同的虚拟主机。
你不仅需要监听 443 端口,还要检查是否有听 80以及名称虚拟主机 *:80。好吧,如果您有“它有效”,则很可能您有这些设置,但没有虚拟主机。
您可以向 apache 询问他对您的虚拟主机的完整了解列表。这里我使用'阿帕奇2',根据您的安装,apache 二进制文件可能是'httpd' 或其他内容。执行:
apache 2 -S
或者
apache2 -t -D DUMP_VHOSTS
然后您将获得虚拟主机列表。您可以看到 *:80 和 *:443 上的虚拟主机位于不同的堆栈上。
如果你认为复制粘贴很长的 Virtualhosts 定义很无聊,而这些定义在 *:80 和 *:443 Virtualhosts 上完全相同,那么可以使用包括指令在 VH 之间共享相同的设置。