私はPHPスクリプトを使用して、ディレクトリを作成し、イメージをディレクトリに出力します。これはApacheで正常に動作していましたが、最近、NGINXに切り替えて、限られたRAMをさらに活用することにしました。 PHP mkdir()コマンドを使用してディレクトリを作成しています:
mkdir(dirname($path['image']['server']), 0755, true);
NGINXに切り替えた後、次の警告が表示されます。
Warning: mkdir(): Permission denied in ...
私はすでに親ディレクトリのすべての権限を確認したので、おそらくNGINXまたはPHP-FPMの「ユーザー」を変更する必要があると判断しましたが、その方法がわかりません(ユーザーを指定する必要はありませんでした) Apacheの権限)。私はこれについて多くの情報を見つけることができないようです。どんな助けでも素晴らしいです!
(注:この小さなハングアップに加えて、NGINXへの切り替えは非常にシームレスでした。初めて使用しましたが、文字通りNGINXを起動して実行するのに約10分しかかかりませんでした。ねじれのうち。)
Nginxとphp-fpmをwww:wwwとして実行
Nginx.confを編集して ser をwww www;
に設定します
マスタープロセスがルートとして実行されている場合、nginxはUSER/GROUPにsetuid()/ setgid()を実行します。 GROUPが指定されていない場合、nginxはUSERと同じ名前を使用します。デフォルトでは、nobodyユーザー、nobody、nogroupグループ、または./configureスクリプトの--user = USERおよび--group = GROUPです。
php-fpm.conf を編集し、ユーザーとグループをwww
に設定します。
user-プロセスのUnixユーザー。デフォルトの「www-data」
group-Unixプロセスのグループ。デフォルトの「www-data」
Ubuntu 14.04で、変更するファイルserおよびgroupPHP-FPMは:/etc/php5/fpm/pool.d/www.conf
。このファイルで、次のパラメーターを変更します。
user = www
group = www
listen.owner = www
listen.group = www
実際の質問に答えるには、nginx.conf
のuser
行を次のように変更するだけです。
user [username];
例:
user www-data;
Nginxを実行するための優先ユーザーは、実際にはオペレーティングシステムによって異なります。 Nginxはwww-data
として実行されることになっていることがあります。また、実際にはnobody
として実行されることになっています。
一部のオペレーティングシステム(Windowsなど)では、問題にならず、nginx.conf
のuser
行をコメント化するか、完全に除外することができます。
次の解決策は、Ubuntu 18.04 LTS
、nginx 1.14
、およびphp7.2-fpm
を使用して、私と一緒にWebユーザーを変更することで機能しました。
/etc/nginx/nginx.conf
を編集し、ユーザーをwebuser;
に設定します
user webuser;
/etc/php/7.2/fpm/pool.d/www.conf
を編集します。
user = webuser
group = webuser
...
listen.owner = webuser
listen.group = webuser