#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)の実現可能.


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS