自從 世界網際網路 ( WWW )誕生以來, HTTP 協議已經在多年的演進中,為互聯網提供了安全和快速的數字內容。
最廣泛使用的版本是 HTTP 1.1 ,儘管它擁有功能增強和性能優化,以解決早期版本的缺陷,但在一些其他重要功能上仍然不足,而這些功能已被 HTTP/2 解決。
HTTP/1.1 的限制是什麼?
HTTP/1.1 協議存在以下缺陷,特別是在運行高流量 Web 服務器時,使其不太理想:
- 由於 HTTP 標頭過長而導致網頁加載延遲。
- HTTP/1.1 只能對每個 TCP 連接發送一個文件的請求。
- 鑑於 HTTP/1.1 為每個 TCP 連接處理一個請求,瀏覽器被迫發送大量並行的 TCP 連接,以同時處理這些請求。這導致 TCP 擁塞,最終導致帶寬浪費和網絡降級。
上述問題通常導致性能下降和帶寬使用成本高昂。 HTTP/2 出現解決這些問題,現在已經成為 HTTP 協議的未來。
使用 HTTP/2 的優勢是什麼?
它提供了以下優勢:
- 標頭壓縮,減少客戶端請求,從而降低帶寬消耗。其結果是快速的頁面加載速度。
- 多個請求在一個TCP連接上多路復用。伺服器和客戶端都可以將HTTP請求拆分為多個幀,並在另一端重新組合它們。
- 更快的Web性能,因此導致更好的SEO排名。
- 由於大多數主流瀏覽器在HTTPS上加載HTTP/2,因此安全性得到了改善。
- 由於標頭壓縮功能,HTTP/2被認為更加適合移動設備。
儘管如此,我們將在Apache上在Ubuntu 20.04 LTS和Ubuntu 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

從輸出中可以看出,我們使用的是此文章撰寫時的最新版本,即Apache 2.4.41。
在 Apache 虛擬主機上啟用 HTTP/2
首先,確認網頁伺服器正在運行HTTP/1.1。您可以在瀏覽器上使用Google Chrome的開發者工具部分,通過組合鍵Ctrl +SHIFT + I
進行此操作。點擊‘Network’標籤,並找到‘Protocol’列。

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

然後,找到並編輯您的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

保存更改後,重新啟動Apache網頁伺服器。
$ sudo systemctl restart apache2
要檢查HTTP/2是否已啟用,請使用以下curl命令擷取HTTP標頭,如所示。
$ curl -I --http2 -s https://domain.com/ | grep HTTP

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

使用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

然後,停用prefork MPM模組。
$ sudo a2dismod mpm_prefork

停用模組後,接下來按照顯示啟用Event MPM、Fast_CGI和setenvif模組。
$ sudo a2enmod mpm_event proxy_fcgi setenvif

在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

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