[[フリーソフトウェアのコンパイル]]

Apache MPM の覚え書き

Apache の MPM(Multi Processing Module) をスレッド型(Worker, or Event)で 動かす場合, PHP はスレッドセーフなモードで動かす必要があるようだ.

それには大きく分けて 2つの方法がある.

以下,CentOS 7.4 + EPEL の PHP 5.6 でのお話


(1)Apache を Event MPM で動かす

1.1 以下の内容で /etc/httpd/conf.d/mpm.conf を作成する.

---------------------
# 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 を編集する.

---------------------
#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 をインストール

# 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 の設定

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
Last-modified: 2018-05-30 (水) 17:35:46