我最近在我的服务器*.key
和一个*csr
文件上创建了一个 SSL 证书。
然后我用 Comodo 创建了*crt
和*.ca-bundle
。
我目前有 2 个虚拟主机:
虚拟主机 -http://www.example.com
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/home/example/public_html/example.com/httpdocs"
ServerName example.com
ServerAlias www.example.com
</VirtualHost>
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/example_com.crt
SSLCertificateKeyFile /etc/ssl/certs/server.key
<Directory /home/example/public_html/example.com/httpdocs>
AllowOverride All
</Directory>
DocumentRoot /home/example/public_html/example.com/httpdocs
ServerName example.com
</VirtualHost>
问题是,当我访问时,https://www.example.com
出现了 404
我不确定 vhost 是否正确或者为什么会出现 404 错误。有人见过这种情况吗?
我已经启用mod_ssl
并重新启动了 apache
非常感谢
答案1
如果没有特殊技巧,HTTPS 不支持 NameVirtualHosts;请NameVirtualhost *:443
从配置中删除。
也就是说,ServerName 与证书 CN 不匹配 - 将其更改为 www.example.com。
重新启动 apache。
答案2
默认的 SSL vhost 正在ssl.conf
做两件事:
- 它可以选择向不支持 SNI 的客户端提供哪个证书。
ServerName
它获取所有与ServerAlias
另一个基于名称的虚拟主机不匹配的请求。
简单地删除该NameVirtualHost
命令不会有帮助,因为虚拟主机ssl.conf
将得到每一个请求到端口 443。相反,完全禁用该虚拟主机;您不想要或不需要它。
而且您仍然需要处理证书不匹配的问题;您的证书需要涵盖您的客户正在使用的主机名。
答案3
添加ServerAlias www.example.com
到启用 SSL 的虚拟主机。