SSL VirtualHost 未使用 DocumentRoot

SSL VirtualHost 未使用 DocumentRoot

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

相关内容