Apache が PHP に HTTPS を報告しないのはなぜですか?

Apache が PHP に HTTPS を報告しないのはなぜですか?

問題

ApacheはPHPの変数でHTTPSを報告していません$_SERVER。証明書は次のように正しく構成されています。sslcheck.nlウェブサイトはすべての HTTP リクエストを HTTPS 相当にリダイレクトします。

$_SERVER変数:

  • HTTPSキーが存在しません
  • SERVER_PORT443ではなく80です
  • HTTP_X_FORWARDED_PROTO設定されていません
  • REQUEST_SCHEMEhttpsではなくhttpです

これらの値がないと、Symfony フレームワークと Wordpress は、Web サイトが安全な接続で実行されているかどうかを判断できません。

構成

私はビットナミランプスタック。私の知る限り、サーバーはリバース プロキシを実行していません。Web サイトには mod_pagespeed が設定されていますが、リバース プロキシとして設定されているとは思いません。テスト vhost の 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

実際には、HTTPS ではなく HTTP 経由で Apache にアクセスしているように見えます (そう表示されています)。

Apache 構成ファイルを確認すると、2 つのサイト (:80 (HTTP) 用と :443 (HTTPS) 用) があるはずです。前者は後者にトラフィックをリダイレクトするはずです。:80 で終わる VIRTUALHOST を持つサイト (実際に使用していると思われるサイト) のログ ファイルが、:443 で終わるサイト (使用していると思われる HTTPS ホスト) のログ ファイルと異なることを確認したら、ログ ファイルを確認して、どのサイトを見ているのかを確実に確認できます。

何かがラップされていない HTTP 会話を Apache にトンネリングして SSL 部分を管理している可能性がありますが、bitnampi のドキュメントを見ると、そうはしていないようです。そのため、stunnel のようなものを自分で設定する必要があります。Hakan Lindqvist が言ったように、netstat -lpn で :443 と :80 でリッスンしている Apache のみが表示される場合、真実は Apache の設定ファイルにあるはずです。上で述べたように、確実にするためにログを設定することをお勧めしますが、一般的に、アヒルのように見え、アヒルのように鳴き、池で過ごしたり、雨の中で泳いだりするのが好きな場合は、まずアヒルであるという仮定に基づいて作業してください。猫である可能性は低いからです。

次の情報が役に立つかもしれません:https://wiki.bitnami.com/Components/Apache#SSL証明書でHTTPSサポートを有効にする方法

注目すべきは、これは 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>

関連情報