¿Por qué Apache no informa HTTPS a PHP?

¿Por qué Apache no informa HTTPS a PHP?

Problema

Apache no informa HTTPS en la $_SERVERvariable de PHP. El certificado está configurado correctamente segúnsslcheck.nly el sitio web redirige cada solicitud HTTP al equivalente HTTPS.

$_SERVERvariable:

  • HTTPSla clave no existe
  • SERVER_PORTes 80 en lugar de 443
  • HTTP_X_FORWARDED_PROTOno está configurado
  • REQUEST_SCHEMEes http en lugar de https

Sin estos valores, el marco Symfony y Wordpress no pueden determinar si el sitio web se ejecuta en una conexión segura.

Configuración

estoy ejecutando unLÁMPARA Bitnamipila. Hasta donde puedo decir, el servidor no ejecuta un proxy inverso. El sitio web tiene mod_pagespeed configurado, pero no creo que esté configurado como un proxy inverso. Intenté deshabilitar mod_pagespeed para un vhost de prueba, pero Apache sigue informando http.

¿Cuál más podría ser la razón por la que Apache informa incorrectamente HTTP/HTTPS?

Actualizar

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

Configuración de host virtual:

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

Respuesta1

Me parece que, de hecho, estás accediendo a Apache a través de HTTP, no de HTTPS (que es lo que te dice).

Si revisa su archivo de configuración de Apache, debería tener 2 sitios, uno para: 80 (HTTP) y otro para: 443 (HTTPS). El primero debería redirigir el tráfico al segundo. Si se asegura de que el sitio con VIRTUALHOST que termina en :80 (que es lo que creo que está usando) tenga un archivo de registro diferente al que termina en :443 (que es el host HTTPS que cree que está usando), entonces Podrás ver los archivos de registro y, sin duda, saber qué sitio estás viendo.

Es posible que algo esté canalizando la conversación HTTP desenvuelta a Apache, después de haber administrado la parte SSL, pero después de haber examinado los documentos de bitnampi, no hacen eso, por lo que usted mismo tendría que haber configurado algo como stunnel. Como dijo Hakan Lindqvist, si netstat -lpn muestra solo apache escuchando en :443 y :80, entonces la verdad debe estar en el archivo de configuración de apache. Como mencioné anteriormente, sugiero configurar los registros para estar seguro, pero en general, si parece un pato, grazna como un pato y le gusta pasar tiempo en estanques, nadar bajo la lluvia, primero trabaje en la suposición de que es un pato. ya que es poco probable que sea un gato.

Puede que esto le resulte útil:https://wiki.bitnami.com/Components/Apache#How_to_enable_HTTPS_support_with_SSL_certificates

Vale la pena señalar que este es un ejemplo de configuración de sitio HTTPS (del enlace anterior) <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>

información relacionada