#author("2018-05-30T17:35:46+09:00","default:tanak0to","tanak0to") RIGHT: [[フリーソフトウェアのコンパイル]] Apache MPM の覚え書き Apache の MPM(Multi Processing Module) をスレッド型(Worker, or Event)で 動かす場合, PHP はスレッドセーフなモードで動かす必要があるようだ. それには大きく分けて 2つの方法がある. -(A) PHP-FPM(First PHP Module?) + FastCGI で PHP を動かし, Apache からは CGI として PHP を実行する. -(B) ZTS(Zend Thread Safe) モードを組み込んだ PHP を動かす. 以下,CentOS 7.4 + EPEL の PHP 5.6 でのお話 ----- *(1)Apache を Event MPM で動かす [#ya3a1139] **1.1 以下の内容で /etc/httpd/conf.d/mpm.conf を作成する. [#hb7b4b64] --------------------- # 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> --------------------- **1.2 以下の内容で /etc/httpd/conf.modules.d/00-mpm.conf を編集する. [#h94ee1b9] --------------------- #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)の実現は楽チン. ---- *(2)PHP-FPM をインストール [#nfdadc8b] # 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 *(3)PHP Handler の設定 [#zde79229] 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)の実現可能.