mod_http2
は mod_mpm_prefork
に対応していない
Apache HTTP Server2.4 で http2 を有効化する場合、MPM (マルチプロセッシングモジュール) として、従来の mod_mpm_prefork
ではなく mod_mpm_event
を使用する必要がある。
( http2 では1コネクションで複数のリクエストを捌けるようになったらしい ので、そこらへんに絡む制約だと思われる。)
mod_mpm_prefork
にしたままだと、こんな警告がエラーログに出てきた。
AH10034: The mpm module (prefork.c) is not supported by mod_http2. The mpm determines how things are processed in your server. HTTP/2 has more demands in this regard and the currently selected mpm will just not do. This is an advisory warning. Your server will continue to work, but the HTTP/2 protocol will be inactive.
mod_mpm_event
はマルチスレッドで稼働するため、PHPもマルチスレッド対応の実行方式を選択しなくてはならない
php-fpm
- ネット上にある運用事例ではこちらを選択している場合が多い
- NGINXでPHPを稼働させる場合と同等
- 実行方式を変更する必要があるので構築に若干手間がかかるが、こちらを選択したほうが無難であると見受けられる
mod_php
(ZTS: Zend Thread Safe 版のphpを使用)mod_mpm_event
を有効化した場合、conf.modules.d/15-php.conf
にて自動的にZTS版のPHP (例:libphp-zts-7.1.so
) に切り替わる模様- しかし、PHP公式では
mod_mpm_prefork
+ NTS (Non Thread Safe) なPHP を推奨しているらしい (かなり古い記述ではあるが…..)
前提
# apachectl -V Server version: Apache/2.4.27 (Amazon) Server built: Sep 24 2017 23:19:50 # cat /etc/os-release NAME="Amazon Linux AMI" VERSION="2017.09"
参考情報
- Amazon Linux AMI 2017.09で今こそApacheをhttp/2対応にする手順 | そど
prefork
とmod_http2
併用時のバグmod_http2
のページにもprefork
とmod_http2
併用について言及しているコメントがある