[[フリーソフトウェアのコンパイル]]
Apache MPM の覚え書き
Apache の MPM(Multi Processing Module) をスレッド型(Worker, or Event)で 動かす場合, PHP はスレッドセーフなモードで動かす必要があるようだ.
それには大きく分けて 2つの方法がある.
以下,CentOS 7.4 + EPEL の PHP 5.6 でのお話
--------------------- # Event <IfModule mpm_event_module> StartServers 3 MinSpareThreads 75 MaxSpareThreads 250 ThreadsPerChild 25 MaxRequestWorkers 400 MaxConnectionsPerChild 0 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 </Ifmodule> # Prefork <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 256 MaxRequestWorkers 256 MaxConnectionsPerChild 4000 KeepAlive Off # KeepAlive On # MaxKeepAliveRequests 80 # KeepAliveTimeout 120 </IfModule> ---------------------
--------------------- #LoadModule mpm_prefork_module modules/mod_mpm_prefork.so <-- コメントアウト LoadModule mpm_event_module modules/mod_mpm_event.so <-- アンコメント ---------------------
この設定後,apache を再起動すれば, PHP のモジュールとして libphp5.so ではなく,libphp5-zts.so が読み込まれる.
これにより,上記(B)は実現される.
なお,PHP の設定ファイルは
/etc/php.d/
でなく,
/etc/php-zts.d/
になる.
(B)の実現は楽チン.
# yum install php-fpm
/etc/php-fpm.d/www.conf を編集.
--------------------- ;listen = 127.0.0.1:9000 listen = /var/run/php-fpm.sock ;listen.owner = nobody ;listen.group = nobody listen.owner = apache listen.group = apache 環境に合わせて編集(とりあえずデフォルトを使用) pm = pm.max_children = pm.start_servers = pm.min_spare_servers = pm.max_spare_servers = pm.max_requests = ---------------------
# systemctl enable php-fpm # systemctl start php-fpm
Apache 2.4.10 以降では,下記の記述が可能. (となっているが,CentOS7 の Apache 2.4.6 でも可能だった.)
<IfModule mpm_event_module> <FilesMatch \.php$> SetHandler "proxy:unix:/var/run/php-fpm.sock|fcgi://localhost" </FilesMatch> </IfModule>
これで (A)の実現可能.