问题
Apache 没有在$_SERVER
PHP 变量中报告 HTTPS。证书已根据以下说明正确配置sslcheck.nl网站会将每个 HTTP 请求重定向到等效的 HTTPS 请求。
$_SERVER
多变的:
HTTPS
密钥不存在SERVER_PORT
是 80,而不是 443HTTP_X_FORWARDED_PROTO
未设置REQUEST_SCHEME
是 http 而不是 https
如果没有这些值,Symfony 框架和 Wordpress 就无法确定网站是否在安全连接上运行。
配置
我正在运行Bitnami LAMP堆栈。据我所知,服务器没有运行反向代理。该网站确实配置了 mod_pagespeed,但我不认为这是配置为反向代理。我尝试为测试虚拟主机禁用 mod_pagespeed,但 Apache 一直报告 http。
Apache 错误报告 HTTP/HTTPS 还可能有哪些原因?
更新
输出自netstat -plnt
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 65034/master
tcp 0 0 127.0.0.1:2812 0.0.0.0:* LISTEN 2295/monit
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1801/mysqld.bin
tcp 0 0 127.0.0.1:12301 0.0.0.0:* LISTEN 48346/opendkim
tcp 0 0 127.0.0.1:21 0.0.0.0:* LISTEN 731/vsftpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1889/sshd
tcp6 0 0 ::1:25 :::* LISTEN 65034/master
tcp6 0 0 :::443 :::* LISTEN 25401/httpd
tcp6 0 0 :::80 :::* LISTEN 25401/httpd
tcp6 0 0 :::22 :::* LISTEN 1889/sshd
Vhost配置:
<VirtualHost *:80>
ServerName mydomain.com
DocumentRoot "/opt/bitnami/apps/mydomain/htdocs/web"
RewriteEngine On
#redirect non-www to https://www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
#redirect http://www. to https://www.
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L]
CustomLog /opt/bitnami/apache2/logs/mydomain-http.log combined
Include "/opt/bitnami/apps/mydomain/conf/httpd-app.conf"
</VirtualHost>
<VirtualHost *:443>
ServerName mydomain.com
DocumentRoot "/opt/bitnami/apps/mydomain/htdocs/web"
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
CustomLog /opt/bitnami/apache2/logs/mydomain-https.log combined
SetEnv HTTPS on #Added this to force https environment variable
Include "/opt/bitnami/apps/mydomain/conf/httpd-app.conf"
</VirtualHost>
答案1
在我看来,您实际上是通过 HTTP 而不是 HTTPS 访问 apache(它告诉您这一点)。
如果您检查 apache 配置文件,您应该有 2 个站点,一个用于 :80 (HTTP),另一个用于 :443 (HTTPS)。前者应该将流量重定向到后者。如果您确保 VIRTUALHOST 以 :80 结尾的站点(我认为您实际正在使用)具有与以 :443 结尾的站点(您认为您正在使用的 HTTPS 主机)不同的日志文件,那么您将能够查看日志文件,以确定您正在查看哪个站点。
有可能某些东西正在将未包装的 HTTP 对话通过隧道传输到 apache,并管理 SSL 部分,但查看了 bitnampi 文档后,他们并没有这样做,因此您必须自己设置类似 stunnel 的东西。正如 Hakan Lindqvist 所说,如果 netstat -lpn 仅显示 apache 在 :443 和 :80 上监听,那么真相一定在 apache 配置文件中。正如我上面提到的,我建议配置日志以确保万无一失,但一般来说,如果它看起来像鸭子,叫声像鸭子,喜欢在池塘里消磨时光,在雨中游泳,那么首先假设它是鸭子,因为它不太可能是猫。
你可能会发现这很有帮助:https://wiki.bitnami.com/Components/Apache#How_to_enable_HTTPS_support_with_SSL_certificates
值得注意的是,这是一个示例 HTTPS 站点配置(来自上面的链接)
<VirtualHost *:443> SSLEngine on DocumentRoot "/opt/bitnami/apps/sugarcrm/htdocs" ServerName my-sugarcrm.example.com SSLCertificateFile "/opt/bitnami/apache2/conf/my-sugarcrm.crt" SSLCertificateKeyFile "/opt/bitnami/apache2/conf/my-sugarcrm.key" </VIrtualHost>