好吧,我以前从未使用过 SSL/HTTPS,我只处理过标准 HTTP。最近我开始着手一个需要 SSL 的网站。所以当然,我已经研究了如何开始。我已经成功安装 SSL 证书 - 出现绿色挂锁,服务器响应端口 443 上的 HTTPS 请求。我的问题是,无论我做什么,我都无法使用 HTTPS/SSL 显示任何页面,但它们在端口 80/HTTP 上显示正常(直到我将 HTTP 重定向到 HTTPS)。
简而言之,我可以完全正常访问 HTTPS 网站,但是我的页面没有被发送,而是每次请求都会发送 404。
/etc/apache2/sites-available/[名称].conf
<VirtualHost *:80>
ServerName [serverName]
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
</VirtualHost>
<VirtualHost *:443>
ServerName [serverName]
ServerAdmin [email]
DocumentRoot [docRoot]
# I know the following SSL cert stuff is correct
SSLEngine On
SSLCertificateFile [...]/[domain].crt
SSLCertificateKeyFile [...]/[certificate].key
SSLCertificateChainFile [...]/[theotherone].crt
ErrorLog ${APACHE_LOG_DIR}/[custom]_error.log
CustomLog ${APACHE_LOG_DIR}/[custom]_access.log combined
<Directory "[docRoot]">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
我不确定您是否还有其他想要查看的内容或任何其他详细信息,但如果有,请告诉我。
编辑:
在配置文件中搜索一番后,我发现无论出于什么原因,当连接到 HTTPS 时,服务器都会使用默认配置中的文档根目录 (/var/www/),但是 a2ensite 未启用此默认配置。我似乎无法弄清楚导致这种情况的配置位于何处
答案1
是否绝对有必要将所有 http 请求重定向到 https?因为这似乎是您在此处尝试执行的操作。
我建议您首先从配置文件中删除以下几行:
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
我怀疑那里的语法可能有误。然后尝试在每个 http:// 和 https:// 协议上重新连接。
答案2
我记不清是怎么想出来的,但是我在某个地方偶然发现了一些建议:
<VirtualHost _default_:443>
代替:
<VirtualHost *:443>
自从更换了它之后,我的 SSL 一直运行良好。
答案3
尝试编辑你的文件使其看起来像这样:
这是一个非常基本的配置,如果它有效,请添加您的重定向(如果仍然需要)。
如果这不起作用请显示您的 ssl.conf
NameVirtualHost *:80
NameVirtualHost *:443
<VirtualHost *:80>
<Directory "[docRoot]">
AllowOverride All
</Directory>
DocumentRoot [docRoot]
ServerName [serverName]
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile [...]/[domain].crt
SSLCertificateKeyFile [...]/[certificate].key
SSLCertificateChainFile [...]/[theotherone].crt
<Directory "[docRoot]">
AllowOverride All
</Directory>
DocumentRoot [docRoot]
ServerName [serverName]
</VirtualHost>