Apache가 HTTPS를 PHP에 보고하지 않는 이유는 무엇입니까?

Apache가 HTTPS를 PHP에 보고하지 않는 이유는 무엇입니까?

문제

$_SERVERApache는 PHP 변수 에서 HTTPS를 보고하지 않습니다 . 인증서가 다음에 따라 올바르게 구성되었습니다.sslcheck.nl웹사이트는 모든 HTTP 요청을 HTTPS에 해당하는 요청으로 리디렉션합니다.

$_SERVER변하기 쉬운:

  • HTTPS키가 존재하지 않습니다
  • SERVER_PORT443이 아닌 80입니다.
  • HTTP_X_FORWARDED_PROTO설정되지 않았습니다
  • REQUEST_SCHEMEhttps가 아닌 http입니다

이러한 값이 없으면 Symfony 프레임워크와 Wordpress는 웹 사이트가 보안 연결에서 실행되고 있는지 확인할 수 없습니다.

구성

나는빛나미 LAMP스택. 내가 알 수 있는 한, 서버는 역방향 프록시를 실행하지 않습니다. 웹 사이트에는 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

내가 보기에는 실제로 HTTPS가 아닌 HTTP를 통해 아파치에 액세스하는 것처럼 보입니다(이것이 바로 여러분에게 말하는 것입니다).

Apache 구성 파일을 확인하면 2개의 사이트가 있어야 합니다. 하나는 :80(HTTP)용이고 다른 하나는 :443(HTTPS)용입니다. 전자는 나중에 트래픽을 리디렉션해야 합니다. :80으로 끝나는 VIRTUALHOST가 있는 사이트(실제로 사용하고 있다고 생각되는 것)에 로그 파일이 :443(사용하고 있다고 생각하는 HTTPS 호스트)과 다른 로그 파일이 있는지 확인하면 당신은 확실히 당신이 보고 있는 사이트가 무엇인지 로그 파일을 볼 수 있을 것입니다.

SSL 부분을 관리하면서 래핑되지 않은 HTTP 대화를 아파치로 터널링하는 것이 가능하지만 bitnampi 문서를 살펴본 결과 그렇게 하지 않으므로 직접 stunnel과 같은 설정을 해야 합니다. Hakan Lindqvist가 말했듯이 netstat -lpn이 :443 및 :80에서 수신 대기 중인 Apache만 표시한다면 진실은 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>

관련 정보