如何在Ubuntu 20.04上使用Apache啟用HTTP / 2協議
本教程將向您展示如何在Ubuntu 20.04上啟用HTTP / 2協議以及在Apache上使用服務器推送。 您可能知道,HTTP / 2比HTTP / 1.1協議快得多,這主要是因為前者使Web瀏覽器可以在單個TCP連接(多路復用)上同時向Web服務器發送多個請求並接收亂序的響應。
如今,互聯網用戶的平均帶寬已經大大高於以前,這有助於更快地加載網頁。 但是,帶寬達到5Mbps後,對頁面加載時間幾乎沒有影響。 無論您使用的是5Mbps還是10Mbps,網頁加載的時間幾乎都是相同的。 這些天來,可以極大地影響頁面加載時間的是延遲和往返次數。 這是HTTP / 2復用解決的問題之一。
先決條件
HTTP / 2規範允許使用純文本HTTP,但是實際上,所有主流Web瀏覽器都以需要HTTPS的方式實現HTTP / 2。 因此,在啟用HTTP / 2協議之前,您需要在網站上啟用HTTPS。 您可以閱讀以下詳細指南以啟用HTTPS
- 如何在Ubuntu上使用Let’s Encrypt在Apache上正確啟用HTTPS。
從版本2.4.26開始,Apache中的HTTP / 2可以投入生產。 因此,您將需要使用的Apache 2.4.26或更高版本 mod_http2
,Apache HTTP / 2模塊。 Ubuntu 20.04隨附Apache 2.4.41,可以使用以下命令進行檢查:
apache2 -v
樣本輸出:
Server version: Apache/2.4.41 (Ubuntu) Server built: 2020-04-13T17:19:17
滿足以上兩個要求後,請按照以下說明在Apache中啟用HTTP / 2。
在Apache虛擬主機上啟用HTTP / 2協議
首先,您需要啟用HTTP / 2模塊。
sudo a2enmod http2
然後編輯您的Apache虛擬主機文件。 如果通過“加密”啟用了HTTPS,則SSL虛擬主機將創建為一個單獨的文件,結尾為 le-ssl.conf
。
sudo nano /etc/apache2/sites-enabled/your-site-le-ssl.conf
在打開後放置以下指令 <VirtualHost *:443>
標籤。
Protocols h2 http/1.1
保存並關閉文件。 然後重新啟動Apache,以使更改生效。
sudo systemctl restart apache2
如果您使用的是mod_php
如果您使用 mod_php
與Apache一起使用,則您正在使用prefork MPM模塊。 不幸 Mod_http2
不支持前叉。 您可以使用事件MPM模塊來支持HTTP / 2,這需要您使用FastCGI運行PHP,因為事件MPM與 mod_php
。 請按照以下步驟從前叉切換到事件MPM。
禁用PHP7模塊。
sudo a2dismod php7.4
禁用前叉MPM模塊。
sudo a2dismod mpm_prefork
啟用事件MPM,Fast_CGI和setenvif模塊。
sudo a2enmod mpm_event proxy_fcgi setenvif
安裝PHP-FPM
sudo apt install php7.4-fpm
啟動PHP-FPM
sudo systemctl start php7.4-fpm
啟用PHP-FPM在啟動時啟動。
sudo systemctl enable php7.4-fpm
使用以下命令將PHP-FPM設置為Apache的PHP處理程序,這將啟用 /etc/apache2/conf-available/php7.4-fpm .conf
文件。
sudo a2enconf php7.4-fpm
重新啟動Apache,以使更改生效。
sudo systemctl restart apache2
測試
您如何知道您的站點實際上正在使用HTTP2協議?
- 在Firefox或Google Chrome瀏覽器中,加載您的網站頁面,然後按
Ctrl+Shift+I
打開 開發者工具, 點擊 網絡 標籤。 您可以看到您的域使用的協議。 - 您也可以在Google Chrome瀏覽器中安裝HTTP / 2和SPDY Indicator擴展。
- 在Firefox中安裝HTTP / 2 Indicator擴展。
- KeyCDN的在線HTTP / 2測試工具可以告訴您您的站點是否支持HTTP / 2和ALPN。
請注意,您可能需要清除瀏覽器的緩存,因為緩存的對象可能被錯誤地標記為HTTP / 1.1協議。
如何啟用服務器推送
HTTP / 2帶有一個稱為“服務器推送”的功能,該功能允許Web服務器發送Web瀏覽器不需要的資源,但該資源是加載Web頁面所必需的。 例如,如果Web瀏覽器請求HTML文檔,則Web服務器知道客戶端將需要關聯的CSS文件並將其與HTML文檔一起發送,從而消除了Web瀏覽器發送CSS請求的需要,因此行程減少。
在這裡,我以WordPress為例。 WordPress網站通常需要以下資源。
- style.css:主樣式表,位於主題目錄的根目錄中。
- jquery.js:jQuery庫
- jquery-migrate.min.js:舊的JQuery
- wp-embed.min.js:用於嵌入視頻
要將這些資源推送給客戶端,請在中添加以下指令 <VirtualHost>
塊。 用您自己的WordPress主題名稱替換“ 17”。
Header add Link "</wp-content/themes/twentyseventeen/style.css>;rel=preload" Header add Link "</wp-includes/js/jquery/jquery.js>;rel=preload" Header add Link "</wp-includes/js/jquery/jquery-migrate.min.js>;rel=preload" Header add Link "</wp-includes/js/wp-embed.min.js>;rel=preload"
保存並關閉文件。 然後重新啟動Apache,以使更改生效。
sudo systemctl restart apache2
請注意,您需要在以下代碼中添加以下代碼 functions.php
文件以從WordPress CSS和JavaScript文件中刪除版本號。 WordPress更新時,如果將版本號添加到這些文件中,則服務器推送將不起作用。
// Remove WP Version From Styles add_filter( 'style_loader_src', 'sdt_remove_ver_css_js', 9999 ); // Remove WP Version From Scripts add_filter( 'script_loader_src', 'sdt_remove_ver_css_js', 9999 ); // Function to remove version numbers function sdt_remove_ver_css_js( $src ) { if ( strpos( $src, 'ver=" ) ) $src = remove_query_arg( "ver', $src ); return $src; }
測試服務器推送
在Google Chrome瀏覽器中,加載頁面,然後按 Ctrl+Shift+I
打開開發人員工具,然後單擊“網絡”選項卡。 按F5重新加載。 從下面的屏幕快照中可以看到,服務器推送正在我的一個網站上進行。 如果看到“來自內存緩存”,請右鍵單擊它,清除瀏覽器緩存並重新加載。
而已! 我希望本教程可以幫助您在Ubuntu 20.04上的Apache中啟用HTTP / 2並使用服務器推送。 與往常一樣,如果您發現此帖子有用,請訂閱我們的免費新聞通訊。