LoginSignup
43
41

More than 5 years have passed since last update.

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

Posted at

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

43
41
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
41