Warum meldet Apache HTTPS nicht an PHP?

Warum meldet Apache HTTPS nicht an PHP?

Problem

Apache meldet kein HTTPS in der $_SERVERVariable von PHP. Das Zertifikat ist korrekt konfiguriert gemäßsslcheck.nlund die Website leitet jede HTTP-Anfrage auf das HTTPS-Äquivalent weiter.

$_SERVERVariable:

  • HTTPSSchlüssel existiert nicht
  • SERVER_PORTbeträgt 80 statt 443
  • HTTP_X_FORWARDED_PROTOist nicht gesetzt
  • REQUEST_SCHEMEist http statt https

Ohne diese Werte können das Symfony-Framework und Wordpress nicht feststellen, ob die Website über eine sichere Verbindung ausgeführt wird.

Aufbau

Ich betreibe einBitnami-LampeStapel. Soweit ich das beurteilen kann, betreibt der Server keinen Reverse-Proxy. Die Website hat zwar mod_pagespeed konfiguriert, aber ich glaube nicht, dass dies als Reverse-Proxy konfiguriert ist. Ich habe versucht, mod_pagespeed für einen Test-Vhost zu deaktivieren, aber Apache meldet weiterhin http.

Was könnte sonst der Grund dafür sein, dass Apache HTTP/HTTPS falsch meldet?

Aktualisieren

Ausgabe vonnetstat -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-Konfiguration:

<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>

Antwort1

Für mich sieht es so aus, als würden Sie auf Apache tatsächlich über HTTP und nicht über HTTPS zugreifen (was Ihnen auch gesagt wird).

Wenn Sie Ihre Apache-Konfigurationsdatei überprüfen, sollten Sie zwei Sites haben, eine für :80 (HTTP) und eine für :443 (HTTPS). Erstere sollte den Verkehr auf letztere umleiten. Wenn Sie sicherstellen, dass die Site mit dem VIRTUALHOST, der auf :80 endet (was ich glaube, dass Sie tatsächlich verwenden), eine andere Protokolldatei hat als die mit der Endung :443 (was der HTTPS-Host ist, den Sie vermutlich verwenden), können Sie die Protokolldateien ansehen, um sicherzugehen, welche Site Sie sich ansehen.

Es ist möglich, dass etwas die unverpackte HTTP-Konversation zu Apache tunnelt, nachdem der SSL-Teil verwaltet wurde, aber nach einem Blick auf die Bitnampi-Dokumente ist klar, dass sie das nicht tun, also müssten Sie selbst so etwas wie Stunnel eingerichtet haben. Wie Hakan Lindqvist sagte, wenn netstat -lpn nur Apache anzeigt, der auf :443 und :80 lauscht, dann muss die Wahrheit in der Apache-Konfigurationsdatei liegen. Wie ich oben erwähnt habe, schlage ich vor, die Protokolle zu konfigurieren, um sicherzugehen, aber im Allgemeinen gilt: Wenn es wie eine Ente aussieht, wie eine Ente quakt und gerne Zeit in Teichen verbringt und im Regen schwimmt, gehen Sie zunächst davon aus, dass es eine Ente ist, da es unwahrscheinlich ist, dass es eine Katze ist.

Das könnte für Sie hilfreich sein:https://wiki.bitnami.com/Components/Apache#How_to_enable_HTTPS_support_with_SSL_certificates

Beachten Sie, dass dies ein Beispiel für eine HTTPS-Site-Konfiguration ist (aus dem obigen Link). <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>

verwandte Informationen