php-fpmでVirtualHostごとにuid/gidを変える
Rev.1を表示中。最新版はこちら。
概要
Apache+CGIの環境ではsuExecで、実行するCGIプログラムのユーザIDを指定することができる。同様にphp-fpmにおいても、設定ファイルでuser/groupを指定すれば、ユーザID、グループIDを指定できる。これをVirtualHostごとにphp-fpmのユーザIDを指定できるようにする。
前提条件
WebサーバーにはApacheを使用。php-fpmが動作する設定は完了済みとする。
OSはFedora28を使用した。
修正方針
php-fpmにはPoolというものがあり、Pool単位で設定を変更することができる。デフォルトではwwwプールが一つだけ定義されており、Fedoraでは/etc/php-fpm.d/www.confに設定ファイルがある。修正の方針としては、VirtualHostごとにプールを作成し、各プールでユーザIDを指定するようにする。
手順
まずは、新しいプールを作成する(fooプール)。wwwプールをベースに作成すると楽なので/etc/php-fpm.d/www.confをコピーして作成する。
cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/foo.conf
foo.confの修正箇所は以下のとおり。
- プール名を修正(ファイル先頭の[www]を[foo]に変更)
- user/group設定を変更
- listen用socketファイルの名前を変更
- 必要に応じてログファイルの名前を変更
修正の差分例は以下のようになる。
# diff www.conf foo.conf 4c4 < [www] --- > [foo] 24c24 < user = apache --- > user = tomita 26c26 < group = apache --- > group = tomita 38c38 < listen = /run/php-fpm/www.sock --- > listen = /run/php-fpm/foo.sock 319c319 < slowlog = /var/log/php-fpm/www-slow.log --- > slowlog = /var/log/php-fpm/foo-slow.log 413c413 < php_admin_value[error_log] = /var/log/php-fpm/www-error.log --- > php_admin_value[error_log] = /var/log/php-fpm/foo-error.log