SSL VirtualHost不使用DocumentRoot

我正在尝试在我自己的VPS和Cloudflare之间build立一个自签名的SSL证书(在Full SSL旁边)。 我正在使用以下VirtualHosts:

<VirtualHost *:80> ServerName domain.com Redirect permanent / https://www.domain.com/ </VirtualHost> <VirtualHost *:443> ServerName www.domain.com DocumentRoot /var/www/public/www SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/apache.key </VirtualHost> 

但是,每当我尝试访问domain.com它将返回一个403 Forbidden并在我的apache2日志中得到以下错误:

 [Fri Jan 30 00:19:23 2015] [error] [client (ip)] Directory index forbidden by Options directive: /var/www/public/ 

这意味着它会尝试访问apache2.conf设置的默认DocumentRoot:

 ServerAdmin [email protected] DocumentRoot /var/www/public 

请注意,当我将第二个VirtualHost的端口更改为80并注释关于SSL的3行时,它可以正常工作。

所以我的问题是:为什么不使用我在VirtualHost( *:433 )中指定的DocumentRoot?

编辑

当我暂停Cloudflare并转到https://www.domain.com时,我可以访问它(当然由于证书是自签名的,所以会出现警告)。 所以也许这跟Cloudflare有关系?

我的猜测是你必须为SSL端口启用NameVirtualHost。
可以通过编辑文件/etc/apache2/ports.conf来完成。
在那里你可以看到端口80的configuration:

NameVirtualHost *:80
听80

你也可以看到IFmodule mod_ssl.c标签。
默认情况下,标签内应该只有“Listen 443”,你只需要在“Listen 443”行上面添加“NameVirtualHost *:443”即可。 我相信这应该解决你的问题。

显然我没有发布图片的声望,所以在这里你去: http : //i.imgur.com/vGCEAGb.png

编辑:不要忘记重新启动Apache。