Apache > CentOS

>

php-fpm インストールと設定

環境
CentOS Stream release 9
Apache/2.4.57 (CentOS Stream)
Xserver VPS

PHPをモジュールで動作させるかCGIで動作させるかについてだが、PHP で並列処理のコーディングを行いたいなら PHP モジュールで、尚且つ、ソースコードで ZTS を指定してインストールする必要があるが、最近の流れから言って dnf で CGI 版を素直にインストールするのが手っ取り早い。

Remi リポジトリのインストール

dnf install http://rpms.remirepo.net/enterprise/remi-release-9.rpm

php-fpm のインストール

dnf -y install php80-php-fpm php-fpm

php-fpm スタート

systemctl start php-fpm

php-fpm 自動起動設定

systemctl enable php-fpm

php-fpm の設定

vi /etc/php-fpm.d/www.conf

ユーザー www は追加済みであることが前提

;user = apache
;↓
user = www

;group = apache
;↓
group = www

;listen = /run/php-fpm/www.sock
;↓
listen = /var/run/php-fpm/php-fpm.sock

;listen.owner = nobody
;↓
listen.owner = www

;listen.group = nobody
;↓
listen.group = www

listen.mode = 0660

;pm = dynamic
pm = static
pm.max_children = 4

;pm.start_servers = 300
;pm.min_spare_servers = 200
;pm.max_spare_servers = 400
;pm.process_idle_timeout = 10s;

pm.max_requests = 1200

php-fpm リスタート

systemctl restart php-fpm

pm.max_children = 4 は CPU 4 コアの環境に合わせている。
ネット上に MPM の設定も含めて設定情報が出ており、参考にしていじっては見たが、これといった効果は見られず、結局、上の設定内容に落ち着いている。00-mpm.conf の設定においても LoadModule mpm_event_module modules/mod_mpm_event.so が有効になっているだけの設定。(デフォルト)

httpd の設定

vi /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
     ⌇
     ⌇
     
    Options FollowSymLinks ExecCGI
    AllowOverride All
    Require all granted
    AddHandler cgi-script .cgi .pl .py

    <FilesMatch .php$>
        SetHandler "proxy:unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost"
    </FilesMatch>

</Directory>

# 最終行に下記を追記
Timeout 5400
KeepAlive On
MaxKeepAliveRequests 3000
KeepAliveTimeout 0

httpd リスタート

systemctl restart httpd

現在アクティブな php.ini の場所を確認

php -i | grep php.ini
out
Configuration File (php.ini) Path => /etc/opt/remi/php80
Loaded Configuration File => /etc/opt/remi/php80/php.ini

php.ini の設定

vi /etc/opt/remi/php80/php.ini
409 max_execution_time = 0
430 memory_limit = 256M
934 date.timezone = Asia/Tokyo
1503 [mbstring]
1507 mbstring.language = Japanese
1514 default_charset = "UTF-8"
1515 mbstring.internal_encoding = UTF-8
1523 mbstring.http_input = pass
1533 mbstring.http_output = pass
1541 mbstring.encoding_translation = Off
1546 mbstring.detect_order = UTF-8,EUC-JP,SJIS,JIS,ASCII