我正在尝试在自己的 VPS 和 Cloudflare 之间设置自签名 SSL 证书(旁边是完整的 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/
这意味着它尝试访问如下设置的默认 DocumentRoot apache2.conf
:
ServerAdmin [email protected]
DocumentRoot /var/www/public
请注意做当我将第二个 VirtualHost 的端口更改为 80 并注释掉有关 SSL 的 3 行时,它就可以工作了。
所以我的问题是:为什么不使用我在 VirtualHost () 中指定的 DocumentRoot *:433
?
编辑
当我暂停 Cloudflare 并转到https://www.domain.com我可以访问它(当然会有一个警告,因为证书是自签名的)。所以也许这与 Cloudflare 有关?
答案1
我猜你必须为 SSL 端口启用 NameVirtualHost。
可以通过编辑文件 /etc/apache2/ports.conf 来完成。
在那里你可以看到端口 80 的配置:
NameVirtualHost *:80
监听 80
您还可以看到 IFmodule mod_ssl.c 标签。
默认情况下,标签内应该只有“Listen 443”,您只需在“Listen 443”行上方添加“NameVirtualHost *:443”。我相信这应该可以解决您的问题。
显然我没有发布图片的资格,所以这里给你: https://i.stack.imgur.com/HSA4u.png
编辑:不要忘记重新启动 Apache。