在 Debian 9.13 上的 apache2 v2.4.25 中啟用了 HTTP/2 支持,但測試顯示不支持 HTTP/2
我正在嘗試配置 HTTP/2 支持,但出了點問題
我的伺服器是執行 Debian 9.13(拉伸)伺服器版本 Apache/2.4.25 的Google計算引擎 vm,並使用 OpenSSL 配置了 SSL 證書。當我執行
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”以及此處。這樣做之後,當我執行命令時
apache2ctl -M | grep http2
,它會返回http2_module (shared)
啟用 HTTP/2 支持的信號。但它不在生產中。這是我的 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 測試網站上測試了該網站,但每次都失敗。
升級到支持的作業系統
您使用了 Debian Stretch,主要支持是恕我直言,已經 EOL。(生命週期結束)
安全更新檔在 2022 年 6 月 30 日之前仍然可用。
更改 Apache 處理模組
sudo a2dismod mpm_prefork sudo a2enmod mpm_event
啟用 SSL 和 http2 模組
sudo a2enmod ssl sudo a2enmod http2
啟用 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
參考
關於本指南