如何在 Ubuntu 上啟用 Apache 中的 HTTP/2

自從 世界網際網路 WWW )誕生以來, HTTP 協議已經在多年的演進中,為互聯網提供了安全和快速的數字內容。

最廣泛使用的版本是 HTTP 1.1 ,儘管它擁有功能增強和性能優化,以解決早期版本的缺陷,但在一些其他重要功能上仍然不足,而這些功能已被 HTTP/2 解決。

HTTP/1.1 的限制是什麼?

HTTP/1.1 協議存在以下缺陷,特別是在運行高流量 Web 服務器時,使其不太理想:

  1. 由於 HTTP 標頭過長而導致網頁加載延遲。
  2. HTTP/1.1 只能對每個 TCP 連接發送一個文件的請求。
  3. 鑑於 HTTP/1.1 為每個 TCP 連接處理一個請求,瀏覽器被迫發送大量並行的 TCP 連接,以同時處理這些請求。這導致 TCP 擁塞,最終導致帶寬浪費和網絡降級。

上述問題通常導致性能下降和帶寬使用成本高昂。 HTTP/2 出現解決這些問題,現在已經成為 HTTP 協議的未來。

使用 HTTP/2 的優勢是什麼?

它提供了以下優勢:

  1. 標頭壓縮,減少客戶端請求,從而降低帶寬消耗。其結果是快速的頁面加載速度。
  2. 多個請求在一個TCP連接上多路復用。伺服器和客戶端都可以將HTTP請求拆分為多個幀,並在另一端重新組合它們。
  3. 更快的Web性能,因此導致更好的SEO排名。
  4. 由於大多數主流瀏覽器在HTTPS上加載HTTP/2,因此安全性得到了改善。
  5. 由於標頭壓縮功能,HTTP/2被認為更加適合移動設備。

儘管如此,我們將在Apache上在Ubuntu 20.04 LTSUbuntu 18.04 LTS上啟用HTTP/2

先決條件:

在開始之前,請確保在啟用HTTP/2之前在Apache Web伺服器上啟用HTTPS。這是因為所有主流Web瀏覽器都支持HTTPS上的HTTP/2。我有一個域名指向Ubuntu 20.04上的一個實例,該實例正在使用Let’s Encrypt證書保護的運行Apache伺服器

此外,建議您使用Apache 2.4.26及更高版本的生產伺服器來進行到HTTP/2的遷移。

要檢查您正在運行的Apache版本,請執行以下命令:

$ apache2 -v
Check Apache Version in Ubuntu

從輸出中可以看出,我們使用的是此文章撰寫時的最新版本,即Apache 2.4.41

在 Apache 虛擬主機上啟用 HTTP/2

首先,確認網頁伺服器正在運行HTTP/1.1。您可以在瀏覽器上使用Google Chrome的開發者工具部分,通過組合鍵Ctrl +SHIFT + I進行此操作。點擊‘Network’標籤,並找到‘Protocol’列。

Confirm HTTP Protocol Version

接下來,通過運行以下命令在Ubuntu上啟用HTTP/2模塊。

$ sudo a2enmod http2
Enable HTTP/2 on Ubuntu

然後,找到並編輯您的SSL虛擬主機文件,如果您已經使用Let’s Encrypt啟用了HTTPS,則會創建一個帶有le-ssl.conf後綴的新文件。

$ sudo vim /etc/apache2/sites-enabled/your-domain-name-le-ssl.conf

<VirtualHost *:443>標籤之後插入以下指令。

Protocols h2 http/1.1
Enable HTTP/2 on Apache

保存更改後,重新啟動Apache網頁伺服器。

$ sudo systemctl restart apache2

要檢查HTTP/2是否已啟用,請使用以下curl命令擷取HTTP標頭,如所示。

$ curl -I --http2 -s https://domain.com/ | grep HTTP
Check HTTP/2 Support in Apache

您應該獲得所示的輸出。

HTTP/2 200

在瀏覽器中重新加載您的站點。然後返回開發者工具並確認‘Protocol’列上的h2標籤表示HTTP/2。

Confirm HTTP/2 Protocol Version

使用mod_php模塊時與Apache

如果您正在運行Apache並且同時使用mod_php模組,您需要切換到PHP-FPM。這是因為mod_php模組使用不被HTTP/2支援的prefork MPM模組。您需要卸載prefork MPM並切換到將由HTTP/2支援的mpm_event模組。

例如,如果您正在使用PHP 7.4 mod_php模組,請按照以下方式停用它:

$ sudo a2dismod php7.4 
Disable mod_php Module

然後,停用prefork MPM模組。

$ sudo a2dismod mpm_prefork
Disable Prefork MPM in Apache

停用模組後,接下來按照顯示啟用Event MPMFast_CGIsetenvif模組。

$ sudo a2enmod mpm_event proxy_fcgi setenvif
Enable Event MPM in Apache

在Ubuntu上安裝PHP-FPM

接下來,按照顯示安裝並啟動PHP-FPM

$ sudo apt install php7.4-fpm 
$ sudo systemctl start php7.4-fpm

然後啟用PHP-FPM在開機時啟動。

$ sudo systemctl enable php7.4-fpm

接下來,啟用PHP-FPM作為Apache的PHP處理器,並重啟Apache網頁伺服器以使更改生效。

$ sudo a2enconf php7.4-fpm

在Ubuntu Apache中啟用HTTP/2支援

然後像以前一樣啟用HTTP/2模組。

$ sudo a2enmod http2

重啟Apache以同步所有更改。

$ sudo systemctl restart apache2

最後,您可以使用HTTP/2協議顯示的curl命令測試您的服務器是否在使用。

$ curl -I --http2 -s https://domain.com/ | grep HTTP
Check HTTP/2 Protocol in Apache

你可以选择使用 Google Chrome 浏览器上的开发者工具进行验证,就像之前记录的那样。我们已经到达了本指南的末尾,希望你觉得这些信息有价值,并且能够轻松地在 Apache 上启用 HTTP/2

Source:
https://www.tecmint.com/enable-http2-in-apache-on-ubuntu/