nginxの実行ユーザーの変更方法

nginxをFrontendに置き、同じサーバー上にApache + PHP-OPCacheを置いて運用する場合、Frontend ServerとBackend Serverの実行ユーザーが異なることになるので、どちらかに統一しておいたほうが、何かと便利である。

全ての動作を、nginx + fastcgi(php-fpm)で構成する場合には、php-fpmの実行ユーザーを、nginx:nginxにしておけば、統一がとれて良いが、場合によっては、Apache + php OPCacheで動作させたほうが、便利なことが多いので、爆速サーバーを狙わないのであれば、むしろ、ApacheをBackend Serverに持ってきたほうが、運用が楽だ。

このような場合、nginx側の実行ユーザーをapache:apache若しくは、apache:usersとしておくと、WordPressなどのアプリケーション上から、nginx Proxy CacheがFlush出来て便利になる。

nginx userの変更

[/etc/nginx/nginx.conf]

# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/

user apache users;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

この状態で、proxy_cache_pathの内容を一旦消して、nginx を再起動すれば、変更したuser:groupでCacheが自動的に再構成されるので、あとは、ディレクトリのパーミッションを注意しながら使えば良い。

念のために変更する箇所は、/etc/init.d/nginxを念のために見ておくと良い

[/etc/init.d/nginx]

start() {
   NAME=apache
   DESC=users
   umask 0002
   [ -x $nginx ] || exit 5
   [ -f $NGINX_CONF_FILE ] || exit 6
   echo -n $"Starting $prog: "
   daemon $nginx -c $NGINX_CONF_FILE
   retval=$?
   echo
   [ $retval -eq 0 ] && touch $lockfile
   return $retval
}

スタートブロックに、NAMEを追加しておけば、安全(かもしれない)
umaskは、ここで設定しておくと、nginxがアプリケーション上から作るパーミッションが、775や、664としたければ、
0002としておく。
755や644のほうがお好みなら、0022としておけば良い。

これで、nginxは、apache:usersとして実行されるので、Apache上から、nginx proxy cacheの操作が可能になる。
WordPressなどでは、nginx cacheというpluginをインストールしておけば、WordPress上から、nginx proxy cacheが自由にFlush出来るので、便利に使える環境となる。

また、fastcgi環境で利用する場合には、今度は、php-fpmの実行ユーザーをnginx:nginxもしくは、nginx:usersとしておくと、nginxの実行権限と一致させる事ができる。

[/etc/php-fpm.d/www.conf]
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = users

; The address on which to acce

group名をusersにするのは、好みの問題だが、nginx:nginxよりは、一般ユーザー権限で、usersグループに属させておいたほうが、使いやすいからだが、普通に、nginx:nginxでも問題ない。