HTTP/2 지원을 구성하려고 하는데 문제가 발생했습니다.
내 서버는 OpenSSL을 사용하여 구성된 SSL 인증서와 함께 Debian 9.13(stretch) 서버 버전 Apache/2.4.25를 실행하는 Google 컴퓨팅 엔진 vm입니다. 실행하면 openssl version
버전 1.1.1g가 보고됩니다. 실행 phpinfo();
하면 OpenSSL/1.0.2u
. PHP 버전 7.4.11 및 phpinfo();
보고서...
SSL_VERSION_INTERFACE -> mod_ssl/2.4.25
SSL_VERSION_LIBRARY -> OpenSSL/1.0.2u
SSL_PROTOCOL -> TLSv1.2
나는 지시를 따랐다.여기"Apache에서 HTTP/2 모듈 활성화" 및 "Apache 가상 호스트에서 HTTP/2 활성화" 및여기. 그런 다음 명령을 실행하면 HTTP/2 지원이 활성화되었다는 신호 apache2ctl -M | grep http2
가 반환됩니다 . http2_module (shared)
하지만 생산되고 있지는 않습니다.
내 apache2 가상 호스트 구성 파일에 사용된 줄은 다음과 같습니다./etc/apache2/sites-available/default-ssl.conf
<VirtualHost _default_:443>
Protocols h2 h2c http/1.1
...
curl -vso http2_debug.log --http2 https://pharealty.com/
다음은 페이지를 성공적으로 다운로드하는 명령을 사용할 때 자세한 연결 정보입니다 .
* Trying 35.236.101.224...
* TCP_NODELAY set
* Connected to pharealty.com (35.236.101.224) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
} [5 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [109 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [4036 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [333 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [70 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
{ [1 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: CN=pharealty.com
* start date: Jul 10 01:53:04 2021 GMT
* expire date: Oct 8 01:53:03 2021 GMT
* subjectAltName: host "pharealty.com" matched cert's "pharealty.com"
* issuer: C=US; O=Let's Encrypt; CN=R3
* SSL certificate verify ok.
} [5 bytes data]
> GET / HTTP/1.1
> Host: pharealty.com
> User-Agent: curl/7.52.1
> Accept: */*
>
{ [5 bytes data]
< HTTP/1.1 200 OK
< Date: Wed, 08 Sep 2021 17:20:21 GMT
< Server: Apache
< Upgrade: h2,h2c
< Connection: Upgrade
< Set-Cookie: PHPSESSID=1mv9jqka4n7c7fb6qmtavfsgue; path=/
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate
< Pragma: no-cache
< X-Pingback: https://pharealty.com/xmlrpc.php
< Link: <https://pharealty.com/wp-json/>; rel="https://api.w.org/"
< Link: <https://pharealty.com/wp-json/wp/v2/pages/48>; rel="alternate"; type="application/json"
< Link: <https://pharealty.com/>; rel=shortlink
< Set-Cookie: phaLandingPage=%2F; expires=Tue, 08-Mar-2022 17:20:21 GMT; Max-Age=15638400; path=/
< Vary: Accept-Encoding
< Transfer-Encoding: chunked
< Content-Type: text/html; charset=UTF-8
<
{ [7 bytes data]
* Curl_http_done: called premature == 0
* Connection #0 to host pharealty.com left intact
처음에는 완벽하게 작동하다가 나중에 HTTP/1.1로 되돌아가는 것 같습니다.
내가 아는 바로는 OpenSSL의 새로운 버전이 충분히 확보되었습니다. 그리고 비록제가 이전에 언급했던 이 페이지2.4.25보다 높은 버전의 Apache를 적극 권장합니다. 저는 Apache를 2.4.25 이외의 버전으로 업데이트할 수 없었습니다.
전환한 후 새 SSL 인증서를 설정해야 합니까? 문제의 원인이 Apache 버전입니까?
여러 http/2 테스트 웹사이트에서 사이트를 테스트했는데 매번 실패했습니다.
답변1
지원되는 OS로 업그레이드
주요 지원은 IMHO 이미 EOL인 Debian Stretch를 사용했습니다. (수명 종료)
보안 패치는 다음 날짜까지 사용 가능합니다.2022-06-30.
Apache 처리 모듈 변경
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
SSL 및 http2 모듈 활성화
sudo a2enmod ssl
sudo a2enmod http2
전역 또는 vhost를 통해 http2 지원 활성화
Apache2.conf에 추가:
Protocols h2 http/1.1
또는 가상 호스트를 편집하고 추가하십시오. 프로토콜 h2 http/1.1
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/public_html/example.com
SSLEngine on
SSLCertificateKeyFile /path/to/private.pem
SSLCertificateFile /path/to/cert.pem
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
Protocols h2 http/1.1 #add this here
</VirtualHost>
Apache 서버를 다시 로드해야 한다는 점을 상기시켜주세요.
sudo systemctl restart apache2
모든 PHP 버전을 가져오려면 내 bash 스크립트를 살펴보세요.
https://raw.githubusercontent.com/djdomi/php-install/master/run.sh
참조
에 관하여이 가이드