現在稼働中のサーバのApacheのバージョンを2.4.27にアップグレードしたら、

HTTP/2が使用できなくなっていた。


Apacheの使用を確認すると、

Apache2.4.27からMPM(マルチプロセッシングモジュール)の設定がpreforkであるとHTTP2の設定を無効するように仕様が変更されたらしい。

マルチプロセッシングモジュール (MPM) - Apache HTTP サーバ


というわけで、

MPMをpreforkからworkerに変更して、

再びHTTP/2を使用できるようにしてみた。

※preforkとworkerの違いは大雑把に言うとリクエストに対する処理がプロセスかスレットか?の違い


環境

OS Ubuntu 16.04

Apache 2.4.27


最初に下記のコマンドを実行してMPMの設定を調べてみる。

apachectl -V
Server version: Apache/2.4.27 (Ubuntu)
Server built:   2017-07-31T00:00:00
Server's Module Magic Number: 20120211:68
Server loaded:  APR 1.6.2, APR-UTIL 1.6.0
Compiled using: APR 1.6.2, APR-UTIL 1.6.0
Architecture:   64-bit
Server MPM:     prefork
(以下省略)

Server MPMを変更する前に前提として、

PHPはFastCGIで動作させないとMPM_workerは動作しないとのこと

PHP: FastCGI Process Manager (FPM) - Manual


というわけで、MPM_preforkからMPM_workerに変更してみる。

※PHP7.2系統をインストールしたい場合はphp7.0をphp7.2にすると良いです

sudo a2dismod php7.0
sudo a2dismod mpm_prefork
sudo a2enmod mpm_worker

#FastCGIを有効にする
sudo apt-get install php7.0-fpm php7.0-cgi php7.0-apcu
sudo a2enconf php7.0-fpm

sudo a2enmod proxy_fcgi
sudo /etc/init.d/apache2 restart

#MPMの確認
apachectl -V

出力内容

Server MPM: worker

Server MPMがworkerになっていることが確認できた後、ブラウザでサイトを開き、ディベロッパーツールでネットワークを確認してみる。



Protocolがh2に戻った。

しかしなんでだろう?

画像の大半はhttp/1.1になっている。


画像周りも何かしないといけないのかな?


追記

ctrl + F5でブラウザのキャッシュを削除したら、画像ファイルもh2で転送されるようになった。