啟用Http2

在Ubuntu 18.04.2 LTS上的apache2啟用http2,流程如下

模組部份

需啟用mod_ssl、 mod_http2模組。

如果有啟用mod_mpm_prefork,需改用mod_mpm_event,兩者無法同時載入。

在不具備多行程的處理引擎下,prefork是唯一的選擇,但http2在prefork下有一些嚴格的限制。

在prefork下,http2同時間只能處理一個連線,但現在的瀏覽器都會同時間送出很多連線,若其中有一個連線被佔用很長時間,其他連線就會「停止」。

如果真的沒辦法從prefork改用event,官方建議可以調整 H2MinWorkers

實測加了 H2MinWorkers 的效果,的確可以在prefork下載入http2,並成功啟用apache,但也只有這樣而已,實際還是沒有實現http2連線。

所以如果真的想用http2,還是乖乖的使用 mod_mpm_event,但若改用 mod_mpm_event,其它相依於 mod_mpm_prefork 的模組也沒辦法使用,像是 mpm_itk_module 

原文: https://httpd.apache.org/docs/2.4/howto/http2.html#mpm-config

設定部份

就Apache文件來看,http2可實現在http及https,協定名稱分別是h2c及h2,但因為當前主要瀏覽器實作http2連線只針對https,因此SSL的部份是必要的,需先設定好。

實際的http2協定設定如下。

Protocols h2 h2c http/1.1

這個可以加在全域設定裡,也可以加在virtual host區塊,也可以在全域和 virtual host區塊一起加。如果virtual host區塊裡有設,那麼就只有這個virtual host才會套用,而且virtual host區塊的設定也會覆寫全域的設定

針對非加密連線可以移除h2,雖然前述提到現今的瀏覽器幾乎不支援http的http2連線,但就Apache文件的說明,透過curl是可以實現http的http2連線。

Protocols h2c http/1.1

FPM/FastCGI

有些網路上的作法會提到要設定 FPM/FastCGI ,這個步驟我不確定是不是必要的,雖然我最後也是有按照這個步驟執行,但感覺好像非必要。如果上述模組和設定部份設定後仍無法啟用http2,那再加上這個步驟吧。

檢視結果

使用開發人員工具檢視結果,如下圖所示。如果看不到protocol欄位,請在protocol相同列的其他任一標題欄上按右鍵,就會出現選單可供選擇 protocol,勾選後就會出現了。

參考:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Proudly using Dynamic Headers by Nicasio WordPress Design