現在稼働中のサーバの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で転送されるようになった。