LinuxサーバーにNginxを使用していますが、このフォルダー/usr/local/openresty/nginx/webfolder/img
を使用して、nginxでアップロードした画像ファイルを保存します。
だから、これは私がしたことです:
1)ディレクトリの所有者をwww-data
グループのwww-data
ユーザーに変更しました。
chown -R www-data:www-data /usr/local/openresty/nginx/webfolder/img
2)次に、ディレクトリのアクセス許可を更新しました。
Sudo chmod 0600 /usr/local/openresty/nginx/webfolder/img
Luaアップロードエラー部分(エラーをログに記録する場所):
fileToSave, errMessage = io.open(savefiletarget, "w+b")
if not fileToSave then
--ngx.say("failed to open file ", savefiletarget)
ngx.log(ngx.NOTICE,'failed to save file : '..savefiletarget..' reason: '..errMessage);
ngx.say('{"filename" : "'..filenametosave..'","status" : 0 ,"message":"failed to open file"}')
return
end
現在、ファイルをアップロードしようとすると、エラーログにPermission Denied
が表示されます。
www-data
はnginxが正しく使用するユーザーだと思いますか?では、なぜまだファイルを書き込めないのですか?
ディレクトリに間違った権限を与えました。 0600
は、ディレクトリへの読み取りおよび書き込み権限を付与します。ただし、ディレクトリにアクセスするには、execute権限も必要です。次に例を示します。
[jenny@temeraire sf] $ mkdir test1
[jenny@temeraire sf] $ chmod 0600 test1
[jenny@temeraire sf] $ touch test1/foo
touch: test1/foo: Permission denied
[jenny@temeraire sf] $ chmod 0700 test1
[jenny@temeraire sf] $ touch test1/foo
[jenny@temeraire sf] $ ls -ld test1/foo
-rw-r--r-- 1 jenny staff 0 Jun 5 07:46 test1/foo
メインの構成ファイルである/etc/nginx/nginx.confでuser
ディレクティブを探します。
それが存在しない場合は、ps -fwwC nginx
などのコマンドを使用して実行中のプロセスを検査できます。ユーザーIDはおそらく左端の列になります。
次に、そのユーザーがSudo -u nginx test -w /usr/local/openresty/nginx/webfolder/img && { echo YUP; } || { echo NOPE; }
のような特定のファイルモードに対する特定の権限を持っているかどうかを確認できます。これにより、ユーザー "nginx"がそのディレクトリで書き込み権限を持たない限り、errexit> 0(NOPE)が返されます。
そうでない場合は、そのディレクトリを所有するアクセス許可グループにユーザーを追加し、ディレクトリのファイルモードを変更して、Sudo useradd -aG www-data nginx; Sudo chmod g+w -c /usr/local/openresty/nginx/webfolder/img
のようなグループ書き込みを許可する必要があります。