Posted at

nginx + php-fpm のPHPをバーチャルホストごとにユーザー権限で動かす

More than 5 years have passed since last update.

nginx + php-fpm で、PHPでファイル作成とかするとユーザー(とグループ)が nginx になってしまうので、バーチャルホストごとに違うユーザーで動かしたく、それを解消するメモ。

まだこの構成に慣れていないので変なところがあるかも・・・


php-fpm の設定

ユーザー用のプロセスを作るため、

設定ファイルにユーザー(例として「 myname 」)用の記述を追加


/etc/php-fpm.d/www.conf

[myname]

listen = /var/run/php-fpm-myname.sock
listen.mode = 0666
user = myname
group = myname
pm.max_children = 3
pm.start_servers = 3

listen.mode = 0666 がキモで、これがないと nginx で Permission Error が出た。

(pm.~系その他は適宜)

ユーザー用プロセスが動いているか確認

$ service php-fpm restart

$ ps aux | grep '^myname'
myname 21282 0.0 0.5 280012 5224 ? S 11:25 0:00 php-fpm: pool myname
myname 21283 0.0 0.5 280012 5152 ? S 11:25 0:00 php-fpm: pool myname
myname 21284 0.0 0.4 280012 4872 ? S 11:25 0:00 php-fpm: pool myname


nginx の設定

nginxのバーチャルホストを設定

(例として「myname.conf」)


/etc/nginx/conf.d/myname.conf

# 他と重複しない名前

upstream php-fpm-myname {
ip_hash;

# php-fpmのlistenに合わせる
server unix:/var/run/php-fpm-myname.sock;
}

server {
listen 80;
server_name example.com;
root /home/myname/www;
index index.php index.html index.htm;
location ~ \.php$ {
# upstream部分で設定した名前
fastcgi_pass php-fpm-myname;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
include fastcgi_params;
}
}


nginx を再起動

$ service nginx restart

これでPHPで touch('test.txt'); とかやってみてファイル権限がユーザーになってればOK。


あとぜんぜん関係ないけどQiitaのシンタックスハイライトに「nginx」てのがあるのを知ったw