end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

CentOS8 / RHEL8 へ Apache2.4 & php7 (from yum) + mod_php(from source) を install

※ 2021/1/31 追記

一度、php 7.2でmod_php をmake しましたが、pdo 等が利用できなかった為、 その後、php 7.3.26 を使用しています。

以前の CentOS6 では、

# yum install httpd-devel php-devel

により、mod_php ( /etc/httpd/modules/libphp5.so )がinstallされていました。

2020/11時点で最新の CentOS8 / RHEL8 へ apache + php を install しても、 mod_php (libphp7.so)は installされません。

RHEL8 より、apache の MPM の defaultが prefork→event に変更され、 phpに関してもdefaultが mod_phpphp-fpm に変更されたようです。

以降では、RHEL8 における Apache2.4 & php7 (from yum) + mod_php(from source) の install を記載します。

STEP 1 - install Apache2.4 & php7 from yum

$ sudo yum install httpd-devel
$ sudo yum install php-devel

まず、yumapache & php を install します。 この状態では、apache は MPM=event 、 php は mod_phpなし ( /etc/httpd/modules/libphp7.so ) です

$ /usr/sbin/httpd -V
Server version: Apache/2.4.37 (Red Hat Enterprise Linux)
Server built:   Jun 15 2020 11:51:05
Server's Module Magic Number: 20120211:83
Server loaded:  APR 1.6.3, APR-UTIL 1.6.1
Compiled using: APR 1.6.3, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     event ★★ HERE ★★
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
    :

$ ls /etc/httpd/modules/libphp*
ls: cannot access '/etc/httpd/modules/libphp*': No such file or directory

STEP 2 - Apache2.4 MPM の event → prefork 化

以下のように、apache 設定ファイル修正 & apache 再起動だけでOKです。

$ sudo vi /etc/httpd/conf.modules.d/00-mpm.conf
old) #LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
old) LoadModule mpm_event_module modules/mod_mpm_event.so

new) LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
new) #LoadModule mpm_event_module modules/mod_mpm_event.so

$ sudo systemctl restart httpd

$ /usr/sbin/httpd -V
Server version: Apache/2.4.37 (Red Hat Enterprise Linux)
Server built:   Jun 15 2020 11:51:05
Server's Module Magic Number: 20120211:83
Server loaded:  APR 1.6.3, APR-UTIL 1.6.1
Compiled using: APR 1.6.3, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     prefork ★★ HERE ★★
  threaded:     no
    forked:     yes (variable process count)

STEP 3 - install mod_php ( /etc/httpd/modules/libphp5.so )

私が探した限り、yum では mod_php を単独で install できないようですので source から build します。

まず、前準備

$ sudo yum install wget
$ sudo yum install make
$ sudo yum install libxml2-devel

次に、source download や build.

「--with-apxs2=/usr/bin/apxs」により、libphp7.so が buildされるので、 これを /etc/httpd/modules/libphp7.so へ copy すれば、完了です。

$ wget https://www.php.net/distributions/php-7.2.24.tar.gz
$ tar -xvf php-7.2.24.tar.gz
$ cd php-7.2.24
$ ./configure \
  --with-apxs2=/usr/bin/apxs \
  --enable-mbstring \
  --with-mysqli=/usr/bin/mysql_config \
  --with-pdo-mysql=/usr/bin/mysql_config \
  --with-mysql=/usr/bin/mysql_config \
  --with-pdo-pgsql=/usr/bin/pg_config
$ make
$ make test

$ ls -lh ./libs/libphp7.so 
-rwxrwxr-x. 1 44M Nov 28 22:06 ./libs/libphp7.so

$ sudo cp libs/libphp7.so /etc/httpd/modules/

STEP 4 - apache の設定変更

この前のSTEP までに、mod_php の installは完了していますので apacheの設定file (httpd.conf)へ mod_php の設定を追加して下さい。

$ sudo vi /etc/httpd/conf/httpd.conf

LoadModule php7_module modules/libphp7.so
<FilesMatch \.php$>
  SetHandler application/x-httpd-php
</FilesMatch>

$ sudo systemctl restart httpd

STEP 5 - mod_php の動作確認

いつもの? phpinfo() を仕込んだ後に、ブラウザでアクセスし、 表示されれば、OKかと思います。

$ sudo vi /var/www/html/test.php
<?php
phpinfo();
?>