我正在尝试在我自己的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。