今天我第一次为我的网站设置了 HTTPS。我从以下代码开始:
<VirtualHost *:443>
ServerName website.tld
DocumentRoot /var/www/website.tld
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/website.tld.crt
SSLCertificateKeyFile /etc/apache2/ssl/website.tld.key
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/website.tld/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
这完全没问题。现在我想让网站将 http 重定向到 https,并在顶部添加以下内容:
<VirtualHost *:80>
ServerName website.tld
ServerAlias www.website.tld
Redirect 301 / https://website.tld
</VirtualHost>
<VirtualHost *:443>
ServerName www.website.tld
Redirect 301 / https://website.tld
</VirtualHost>
现在,如果我从 http 访问该网站,它会重定向到 https,但是一旦我进入 https 网站,我就会收到来自 Chrome 的错误“ERR_SSL_PROTOCOL_ERROR”。有人能帮忙吗?
答案1
此条目的问题
<VirtualHost *:443>
ServerName www.website.tld
Redirect 301 / https://website.tld
</VirtualHost>
是您省略了该 VirtualHost 的 TLS 证书。这会在 HTTPS 端口上创建一个纯 HTTP 虚拟主机。
该配置应该看起来更像这样
<VirtualHost *:443>
ServerName www.website.tld
Redirect 301 / https://website.tld
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/www.website.tld.crt
SSLCertificateKeyFile /etc/apache2/ssl/www.website.tld.key
</VirtualHost>
或者当现有证书 website.tld.crt 也对 wwww 域有效时,指向该文件。
答案2
欢迎来到 ServerFault!我相信 Freddy 是对的。您的 #1 问题是,端口 443 有两个单独的 VirtualHost 定义。删除“www”重定向,然后使用 .htaccess 规则将“www”重定向到没有 www 的域名。
顺便说一句(可能有帮助),Stack Overflow 上的这个讨论似乎与您要做的事情相关:请注意,在 stackoverflow.com 对话中,操作系统是 Ubuntu:https://stackoverflow.com/questions/3286707/apache-ssl-configuration-error-ssl-connection-error/27568209