こんにちは。22年度入社の中島です。
先日作業していた案件で、ローカル環境構築をした後、
VMとサーバー接続しようとした時の出来事
mpmファイルの設定が「prefork」だとHTTP/2が機能せず
mpmファイルの設定を「event」または「worker」にすると、Apacheが機能しないという状況になりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@vagrant conf]# systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/httpd.service.d └─php-fpm.conf Active: failed (Result: exit-code) since Fri 2023-07-07 10:43:37 UTC; 12s ago Docs: man:httpd.service(8) Process: 9596 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE) Main PID: 9596 (code=exited, status=1/FAILURE) Jul 07 10:43:37 vagrant systemd[1]: Starting The Apache HTTP Server… Jul 07 10:43:37 vagrant httpd[9596]: [Fri Jul 07 10:43:37.388280 2023] [php:crit] [pid 9596:tid 140004470784576] Apache is running a threaded MPM, but your PHP Module is not compiled to be th… recompile PHP. Jul 07 10:43:37 vagrant httpd[9596]: AH00013: Pre-configuration failed Jul 07 10:43:37 vagrant systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE Jul 07 10:43:37 vagrant systemd[1]: Failed to start The Apache HTTP Server. Jul 07 10:43:37 vagrant systemd[1]: Unit httpd.service entered failed state. Jul 07 10:43:37 vagrant systemd[1]: httpd.service failed. Hint: Some lines were ellipsized, use -l to show in full. |
上記のエラーを解決するためにphp-fpmを導入し、mpmの設定を「event」または「worker」にしたところApacheが正常に起動しました。
php-fpmをインストール
1 |
yum install php-fpm |
/etc/httpd/conf.modules.d/00-mpm.confの設定を変更
今回は、workerを有効にしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# Select the MPM module which should be used by uncommenting exactly # one of the following LoadModule lines. See the httpd.service(8) man # page for more information on changing the MPM. # prefork MPM: Implements a non-threaded, pre-forking web server # See: http://httpd.apache.org/docs/2.4/mod/prefork.html # # NOTE: If enabling prefork, the httpd_graceful_shutdown SELinux # boolean should be enabled, to allow graceful stop/shutdown. # # LoadModule mpm_prefork_module modules/mod_mpm_prefork.so # worker MPM: Multi-Processing Module implementing a hybrid # multi-threaded multi-process web server # See: http://httpd.apache.org/docs/2.4/mod/worker.html # LoadModule mpm_worker_module modules/mod_mpm_worker.so # event MPM: A variant of the worker MPM with the goal of consuming # threads only for connections with active processing # See: http://httpd.apache.org/docs/2.4/mod/event.html # # LoadModule mpm_event_module modules/mod_mpm_event.so |
/etc/httpd/conf/httpd.conf に設定を追加しました。
拡張子phpのファイルをApacheで処理する場合に、php-fpmを使うようにする設定として以下の内容を追加します。
1 2 3 4 |
<FilesMatch .php$> #SetHandler "proxy:fcgi://127.0.0.1:9000" SetHandler "proxy:unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost" </FilesMatch> |
Apacheの再起動し、ステータスを確認します。
1 2 |
#systemctl restart httpd #systemctl status httpd |
Apacheが起動したら、phpファイルが正しく処理されることを確認します。
DocumentRootの直下にphpinfo.phpを公開フォルダに作成します。
中身は以下のようになってます。
1 2 |
<?php> phpinfo(); |
これをブラウザで表示します。
正しく動作することを確認できました!
いかがでしたでしょうか。
HTTP/2を動かすためには、preforkでなくeventもしくはworkerで設定し、モジュール版phpでなくphp-fpmなどで動かす必要があるということがわかりました。
今後も業務で起こった出来事をブログにしていきたいと思います。
今回はここまで
最後までご覧いただきありがとうございました!