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