我在我的 sites-available 文件夹中设置了一个子域名,启用它并完成了所有需要的操作,以便它重新启动 apache2 时不会出现任何错误(更改默认:443 到 *:443,将 NameVirtualHost *:443 添加到 ports.conf 等)。
子域名现在运行正常,但当我尝试使用主域名上的 SSL 访问任何页面时,它会跳转到我的错误页面。它似乎接管了所有 SSL。
例如:subdomain.domain.com
Apache2 错误:文件不存在:/var/www/subdomain/foldername
它不应该从子域文件夹读取。我猜这是我下面的虚拟主机设置中的问题:
<VirtualHost *:443>
ServerName subdomain.domain.com
ServerAlias subdomain.domain.com
VirtualDocumentRoot /var/www/subdomain/
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/domain.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/domain.com.key
SSLCertificateChainFile /etc/apache2/ssl/domain.com.crt
SSLCACertificateFile /etc/apache2/ssl/bundle.crt
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM
</VirtualHost>
apachectl -S的结果:
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:443 is a NameVirtualHost
default server subdomain.domain.com (/etc/apache2/sites-enabled/subdomain.domain.com:1)
port 443 namevhost subdomain.domain.com (/etc/apache2/sites-enabled/subdomain.domain.com:1)
port 443 namevhost *.domain.com (/etc/apache2/sites-enabled/default-ssl:2)
*:80 is a NameVirtualHost
default server production1 (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost production1 (/etc/apache2/sites-enabled/000-default:1)
Syntax OK
答案1
SSL 虚拟主机配置与普通配置一样;它们不会从相应的非 SSL vhost 配置或任何内容继承指令。
由于您已指定指令VirtualDocumentRoot /var/www/subdomain/
,apache 将使用此文件夹来处理与此 vhost 匹配的所有请求(例如subdomain.domain.com
)。您应该将其更改为您希望它用于 webroot 的实际位置。
ServerAlias
另外,有一点:如果它是,则不需要在中指定名称ServerName
。
您正在使用通配符 SSL 与这个问题没有特别的关系。
此外,请确保您拥有的每个站点都有自己的 SSL 虚拟主机配置,与明文配置并行。请注意,如果客户端不支持 SNI 但使用 SSL,则将使用端口 443(按字母顺序排列的搜索路径上的第一个)的默认虚拟主机。
查看您的apachectl -S
输出,您需要做一些事情:
- 重命名默认 SSL vhost 配置文件,使其按字母顺序排在所有其他文件之前
- 从默认 SSL 虚拟主机中删除通配符
ServerName
或ServerAlias
并将其替换为domain.com
(www.domain.com
如果您愿意)。由于它是默认的,它将匹配所有未匹配的子域;通配符将使其匹配所有内容,以便subdomain.domain.com
也匹配默认虚拟主机。