正确的 SSL 配置 - Apache2 忽略 DocumentRoot

正确的 SSL 配置 - Apache2 忽略 DocumentRoot

以下是我当前的配置:

<VirtualHost *:443>
    DocumentRoot "/var/www/keypad"
    ServerName keypad.io
    SSLOptions +StrictRequire
    <Directory />
            SSLRequireSSL
    </Directory>
    SSLProtocol -all +TLSv1
    SSLEngine on
    SSLCertificateFile /cert/cert.crt
    SSLCertificateKeyFile /cert/key.key
    SSLCACertificateFile /cert/inter.crt
</VirtualHost>
<VirtualHost *:80>
    ServerName keypad.io
    ServerAlias www.keypad.io
    DocumentRoot /var/www/keypad
    Redirect permanent / https://keypad.io/
</VirtualHost>

这样就可以通过 http:// 和 https:// 访问该网站

由于某种原因,我最终遇到了无限重定向循环,地址栏中显示 https://。

如果我完全删除 *:80 Host,http:// 将停止工作,https:// 将忽略该DocumentRoot属性并返回 apache 欢迎页面。无论我在 *:443 host 块中执行什么操作,我都会获得与欢迎页面的加密连接。

我希望 http:// 和 https:// 都能将客户端定向到我的网站的 SSL 加密版本。我的 apache2.conf 是默认的。我还没有对它做任何事情。

输出apache -version

Server version: Apache/2.4.7 (Ubuntu)
Server built:   Jul 22 2014 14:36:38

有什么想法吗?

编辑:我添加了额外的“/”(并按照建议删除了 SSLv3),但仍然有无限的重定向循环。任何帮助都非常感谢。

答案1

您的指令中缺少一个斜线Redirect

<VirtualHost *:443>
    DocumentRoot "/var/www/keypad"
    ServerName keypad.io
    SSLOptions +StrictRequire
    <Directory />
            SSLRequireSSL
    </Directory>
    SSLProtocol -all +TLSv1 +SSLv3
    SSLEngine on
    SSLCertificateFile /cert/cert.crt
    SSLCertificateKeyFile /cert/key.key
    SSLCACertificateFile /cert/inter.crt
</VirtualHost>
<VirtualHost *:80>
    ServerName keypad.io
    ServerAlias www.keypad.io
    DocumentRoot /var/www/keypad
    Redirect permanent / https://keypad.io/
</VirtualHost>

没有斜线请求:

 curl -v http://keypad.io/bla

将会把您重定向到该https://keypad.iobla位置。

相关内容