我有一个 Apache 安装,mydomain.com
其文档根目录位于:
/var/www/html/
文档根目录中有三个文件夹:
myapp1
myapp2
mysite
我想要带有子域名的以下配置:
myapp1.mydomain.com --> /var/www/html/myapp1
myapp2.mydomain.com --> /var/www/html/myapp2
www.mydomain.com --> /var/www/html/mysite
mydomain.com --> /var/www/html/mysite
配置必须适用于纯文本 HTTP 和 HTTPS。我使用虚拟主机来实现这一点。例如:
<VirtualHost *:80>
DocumentRoot /var/www/html/myapp1
ServerName myapp1.mydomain.com
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /var/www/html/myapp1
ServerName myapp1.mydomain.com
SSLEngine on
SSLCertificateKeyFile /etc/pki/tls/private/server.key
SSLCertificateFile /etc/pki/tls/certs/server.crt
</VirtualHost>
myapp2
和 的配置相同www.mydomain.com
。但是,当我尝试为根域配置 SSL 虚拟主机时,出现了问题:mydomain.com
。这是配置:
<VirtualHost *:443>
ServerName mydomain.com
DocumentRoot /var/www/html/mysite
SSLEngine on
SSLCertificateKeyFile /etc/pki/tls/private/server.key
SSLCertificateFile /etc/pki/tls/certs/server.crt
</VirtualHost>
这不起作用。转到将https://mydomain.com
带我进入默认文档根目录 ( /var/www/html
) 并显示 apache 默认欢迎页面。看来 apache 没有注册此虚拟主机。有趣的是,纯 HTTP 的虚拟主机可以mydomain.com
工作,即将http://mydomain.com
我带到/var/www/html/mysite
。
为什么我不能为根域设置一个 SSL 虚拟主机,而其他虚拟主机却可以正常运行?
答案1
在某处有另一个VirtualHost
针对端口 443 的块,要么在您想要的块之前加载,要么绑定到特定地址*
,这会将请求发送到该位置;这是提供内容的唯一方式。
除此之外,对于您所针对的配置,您还需要确保NameVirtualHost *:443
在现有的配置旁边有一个指令NameVirtualHost *:80
;取决于您的配置布局,但通常在 ports.conf 中。
答案2
问题已解决。
我按照有关另一个 VirtualHost 阻止我自己的配置的建议并找到了它。它是:
<VirtualHost _default_:443>
在 ssl.conf 中定义。问题是该文件位于 conf.d/(在 Fedora 上运行)目录中,所以我没有注意到它。