AlmaLinux 10.1 セットアップメモ
Section 6.2 Webサーバー(nginx)構築編 AppStream PHP
About
nginx(https://nginx.org/) に PHP(https://www.php.net/) をセットアップしていきます。
環境は、Section 6.1を行った直後の状態からとなります。
パッケージの確認
リポジトリに登録されているものからパッケージ名とバージョンを指定してインストールすることになります。 まずは、提供されているかどうかを調べます。
[root@localhost ~]# dnf search php
============================================= Name & Summary Matched: php ==============================================
php.x86_64 : PHP scripting language for creating dynamic web sites
(略)
[root@localhost ~]# dnf repoquery php
php-0:8.3.19-1.el10_0.x86_64
php-0:8.3.26-1.el10_1.x86_64
[root@localhost ~]#
PHP8.3 は、2025年12月 で Active Support が終わって 2027年12月までのセキュリティサポートっぽいけれど……RHEL9のPHP8.3は2029年5月までサポートってなっているから、バックポートしてパッチは当たるとは思うけれど新しいものを使おうと思ったら remi を頼るとかになるのかなぁ?(参考 https://access.redhat.com/support/policy/updates/rhel-app-streams-life-cycle )
とはいえ、PHP 8.3 しかなさそうなので、これをインストールしていきます。
インストール
php本体となにかと使うモジュールをインストールします。不要なモジュールは入れないのが基本です。DBを使う場合でも使うDBに関連するモジュール以外は入れないように気を付けてください。今回は、mariadb を使いたいのでそのモジュールを入れます。(mariaDBやMySQLを使う場合は php-mysqlnd を入れる)
php が入ってないんですが……という話になりそうなパッケージの指定となっています。 php パッケージは構成定期に飾りになっているので、指定する必要はありません。 php-fpm があれば足りるのと、コマンドライン実行はphp-cliがあれば足りるので外しています。
[root@localhost ~]# dnf -y install php-cli php-common php-fpm \
php-gd php-mbstring php-xml php-intl \
php-pdo php-pgsql \
php-pecl-apcu php-opcache \
php-dbg php-pecl-xdebug3
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Installing:
php-cli x86_64 8.3.26-1.el10_1 appstream 2.2 M
php-common x86_64 8.3.26-1.el10_1 appstream 704 k
php-dbg x86_64 8.3.26-1.el10_1 appstream 1.9 M
php-fpm x86_64 8.3.26-1.el10_1 appstream 1.9 M
php-gd x86_64 8.3.26-1.el10_1 appstream 39 k
php-intl x86_64 8.3.26-1.el10_1 appstream 163 k
php-mbstring x86_64 8.3.26-1.el10_1 appstream 522 k
php-opcache x86_64 8.3.26-1.el10_1 appstream 364 k
php-pdo x86_64 8.3.26-1.el10_1 appstream 85 k
php-pecl-apcu x86_64 5.1.23-5.el10 appstream 60 k
php-pecl-xdebug3 x86_64 3.3.1-6.el10 appstream 209 k
php-pgsql x86_64 8.3.26-1.el10_1 appstream 74 k
php-xml x86_64 8.3.26-1.el10_1 appstream 146 k
Installing dependencies:
capstone x86_64 5.0.1-6.el10 appstream 1.0 M
default-fonts-core-sans noarch 4.1-3.el10 baseos 34 k
fontconfig x86_64 2.15.0-7.el10 appstream 273 k
freetype x86_64 2.13.2-8.el10 baseos 412 k
gd x86_64 2.3.3-20.el10_0 appstream 133 k
google-noto-fonts-common noarch 20240401-5.el10 baseos 17 k
google-noto-sans-vf-fonts noarch 20240401-5.el10 baseos 593 k
graphite2 x86_64 1.3.14-17.el10 baseos 95 k
harfbuzz x86_64 8.4.0-6.el10 baseos 1.0 M
httpd-filesystem noarch 2.4.63-4.el10_1.3 appstream 13 k
jbigkit-libs x86_64 2.1-31.el10 appstream 53 k
libX11 x86_64 1.8.10-1.el10 appstream 652 k
libX11-common noarch 1.8.10-1.el10 appstream 189 k
libXau x86_64 1.0.11-8.el10 appstream 32 k
libXpm x86_64 3.5.17-5.el10 appstream 66 k
libjpeg-turbo x86_64 3.0.2-4.el10 appstream 253 k
liblerc x86_64 4.0.0-8.el10 appstream 215 k
libpng x86_64 2:1.6.40-8.el10_1.1 baseos 119 k
libpq x86_64 16.11-3.el10_1 baseos 253 k
libtiff x86_64 4.6.0-6.el10_1.1 appstream 212 k
libwebp x86_64 1.3.2-8.el10 appstream 288 k
libxcb x86_64 1.17.0-3.el10 appstream 238 k
libxslt x86_64 1.1.39-8.el10_0 appstream 188 k
redhat-text-vf-fonts noarch 4.1.0-1.el10 baseos 353 k
xml-common noarch 0.6.3-65.el10 appstream 31 k
Transaction Summary
========================================================================================================================
Install 38 Packages
(中略)
Complete!
[root@localhost ~]#
これでインストールできたので設定を変えます。
PHPの設定
そのままの設定では日本語などの扱いに問題が出るので設定を変更します。
主に変更する内容は下記の表の通り。
| オプション名 | uncomment | 元の内容 | 変更後の内容 |
|---|---|---|---|
| realpath_cache_size | 〇 | 4096k | 4096k |
| expose_php | On | Off | |
| memory_limit | 128M | 192M | |
| error_reporting | E_ALL & ~E_DEPRECATED & ~E_STRICT | E_ALL | |
| display_errors | Off | On | |
| post_max_size | 8M | 32M | |
| upload_max_filesize | 2M | 20M | |
| date.timezone | 〇 | ”Asia/Tokyo” | |
| mbstring.language | 〇 | Japanese |
説明も大変なのでsedコマンドを使って一気に書き換えます。
[root@localhost ~]# cp --preserve=contex /etc/php.ini /etc/php.ini.org
[root@localhost ~]# cat /etc/php.ini.org \
| sed -E "s/;(realpath_cache_size =)(.*$)/\1 4096k/" \
| sed -E "s/(expose_php =)(.*$)/\1 Off/" \
| sed -E "s/(memory_limit =)(.*$)/\1 192M/" \
| sed -E "s/^(error_reporting =)(.*$)/\1 E_ALL/" \
| sed -E "s/(display_errors =)(.*$)/\1 On/" \
| sed -E "s/(post_max_size =)(.*$)/\1 32M/" \
| sed -E "s/(upload_max_filesize =)(.*$)/\1 20M/" \
| sed -E "s/;(date.timezone =)(.*$)/\1 \"Asia\/Tokyo\"/" \
| sed -E "s/;(mbstring.language .*)$/\1/" \
> /etc/php.ini
どのように書き換わったかは、diffを見てください。
[root@localhost ~]# diff -cT /etc/php.ini.org /etc/php.ini
PHP-FPM の設定
このままだとphp-fpmが起動するプロセス数がここで使用している仮想マシンの使用用途から考えると多すぎるので設定を修正します。
主に変更する内容は下記の表の通り。
| オプション名 | uncomment | 元の内容 | 変更後の内容 |
|---|---|---|---|
| pm.max_children | 50 | 10 | |
| pm.max_requests | 〇 | 500 | 100 |
| pm.max_spare_servers | 35 | 10 |
上からプロセスの最大起動数、プロセスを再起動する処理リクエスト数、アイドル状態のプロセス最大起動数になります。「php-fpm 設定」とかで検索すれば、場面に応じた設定が出てくると思うのでそれはそれで参考にしてください。
また、php-fpmを動作させるユーザーが apache になっているで、nginxに変更する設定も同時に行います。
これもsedコマンドを使って一気に書き換えます。
[root@localhost ~]# cp --preserve=contex /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.org
[root@localhost ~]# cat /etc/php-fpm.d/www.conf.org \
| sed -E "s/(pm.max_children =)(.*$)/\1 10/" \
| sed -E "s/;(pm.max_requests =)(.*$)/\1 100/" \
| sed -E "s/(pm.max_spare_servers =)(.*$)/\1 10/" \
| sed -E "s/(user = )(.*$)/\1 nginx/" \
| sed -E "s/(owner = )(.*$)/\1 nginx/" \
| sed -E "s/(group = )(.*$)/\1 nginx/" \
| sed -E "s/;(listen\.owner*)/\1/" \
| sed -E "s/;(listen\.group*)/\1/" \
| sed -E "s/;(listen\.mode*)/\1/" \
> /etc/php-fpm.d/www.conf
[root@localhost ~]# diff -cT /etc/php-fpm.d/www.conf.org /etc/php-fpm.d/www.conf
nginxとの連携設定について
webアクセスでphpが動作するように連携する設定がされているので、必要があれば変更しましょう。
主に、 /etc/nginx/default.d/php.conf と /etc/nginx/conf.d/php-fpm.conf が対象となります。
サービスの起動
php-fpmはサービスの一つとして常駐するようなものとなるので、サービスに登録して起動する必要があります。設定変更時にも、サービスを再起動する必要が出てくるので忘れずに。
まずは登録。
[root@localhost ~]# systemctl enable php-fpm
そのあとは、起動しつつ、nginxも再起動します。
[root@localhost ~]# systemctl start php-fpm
[root@localhost ~]# systemctl restart nginx
動作確認
phpinfo() を表示するページを準備してアクセスしてみましょう。
[root@localhost ~]# echo "<?php phpinfo();" > /var/www/html/phpinfo.php
これで、ネットワーク的に問題が無ければブラウザでアクセスすれば、phpinfoが表示されます。
SELinux と PHP と Database
詳しいことは、Section 5.3 に書いているので、設定だけ変更しておきます。
SELinuxのbool設定で、PHPからDatabaseへの接続を拒否するような設定になっているので変更します。
[root@localhost ~]# setsebool -P httpd_can_network_connect_db on
-P オプションは永続設定にするオプションです。