
問題
Apache 未在$_SERVER
PHP 變數中報告 HTTPS。證書已根據以下內容正確配置sslcheck.nl並且網站將每個 HTTP 請求重新導向到等效的 HTTPS。
$_SERVER
多變的:
HTTPS
密鑰不存在SERVER_PORT
是 80 而不是 443HTTP_X_FORWARDED_PROTO
未設定REQUEST_SCHEME
是 http 而不是 https
如果沒有這些值,Symfony 框架和 Wordpress 無法確定網站是否在安全連線上運作。
配置
我正在運行一個比特奈米燈堆。據我所知,伺服器不運行反向代理。該網站確實配置了 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
虛擬主機配置:
<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)。前者應將流量重定向到後者。如果您確保以 :80 結尾的 VIRTUALHOST 網站(我認為您實際使用的網站)具有與以 :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>