升級到支援的作業系統

升級到支援的作業系統

我正在嘗試配置 HTTP/2 支持,但出現問題

我的伺服器是一台運行 Debian 9.13(延伸)伺服器版本 Apache/2.4.25 的 Google 運算引擎虛擬機,並使用 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 測試網站上測試了該網站,但每次都失敗。

答案1

升級到支援的作業系統

您使用的是 Debian Stretch,其主要支援是恕我直言,已經 EOL。 (生命週期結束)
安全補丁仍然可用,直到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 Server。

sudo systemctl restart apache2

要取得所有 php 版本,您可以查看我的 bash 腳本

https://raw.githubusercontent.com/djdomi/php-install/master/run.sh

參考

關於本指南

相關內容