Почему Apache не сообщает HTTPS в PHP?

Почему Apache не сообщает HTTPS в PHP?

Проблема

Apache не сообщает HTTPS в $_SERVERпеременной PHP. Сертификат правильно настроен в соответствии сsslcheck.nlи веб-сайт перенаправляет каждый HTTP-запрос на эквивалент HTTPS.

$_SERVERпеременная:

  • HTTPSключ не существует
  • SERVER_PORT80 вместо 443
  • HTTP_X_FORWARDED_PROTOне установлено
  • REQUEST_SCHEMEэто http вместо https

Без этих значений фреймворк Symfony и Wordpress не смогут определить, работает ли веб-сайт по защищенному соединению.

Конфигурация

Я управляюБитнами ЛАМПАstack. Насколько я могу судить, сервер не использует обратный прокси. На сайте настроен mod_pagespeed, но я не думаю, что он настроен как обратный прокси. Я пробовал отключить mod_pagespeed для тестового vhost, но 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

Мне кажется, что на самом деле вы обращаетесь к Apache через HTTP, а не HTTPS (о чем он вам и говорит).

Если вы проверите файл конфигурации Apache, у вас должно быть 2 сайта, один для :80 (HTTP) и один для :443 (HTTPS). Первый должен перенаправлять трафик на последний. Если вы убедитесь, что сайт с VIRTUALHOST, заканчивающимся на :80 (который, как я думаю, вы на самом деле используете), имеет другой файл журнала, чем тот, который заканчивается на :443 (который, как вы думаете, является хостом HTTPS, который вы используете), то вы сможете просмотреть файлы журнала, чтобы убедиться, какой сайт вы просматриваете.

Возможно, что-то туннелирует необработанный HTTP-разговор в Apache, управляя частью SSL, но, посмотрев документацию Bitnampi, они этого не делают, поэтому вам придется настроить что-то вроде Stunnel самостоятельно. Как сказал Хакан Линдквист, если netstat -lpn показывает только Apache, слушающий на :443 и :80, то правда должна быть в файле конфигурации Apache. Как я уже упоминал выше, я предлагаю настроить логи, чтобы быть уверенным, но, как правило, если что-то выглядит как утка, крякает как утка и любит проводить время в прудах, плавая под дождем, сначала поработайте над предположением, что это утка, поскольку это вряд ли будет кошка.

Это может оказаться полезным:https://wiki.bitnami.com/Components/Apache#Как_включить_поддержку_HTTPS_с_сертификатами_SSL

Стоит отметить, что это пример конфигурации сайта 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>

Связанный контент