[Apache HTTPD 2.4] mod_http2 使用時の MPM (マルチプロセッシングモジュール) に関する制約メモ

mod_http2mod_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もマルチスレッド対応の実行方式を選択しなくてはならない

  1. php-fpm
    • ネット上にある運用事例ではこちらを選択している場合が多い
    • NGINXでPHPを稼働させる場合と同等
    • 実行方式を変更する必要があるので構築に若干手間がかかるが、こちらを選択したほうが無難であると見受けられる
  2. mod_php (ZTS: Zend 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"

参考情報