我在 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 使用的用户正确吗?那么为什么我仍然无法写入文件?
答案1
您授予了目录错误的权限。0600
将给予读和写目录的权限。但要访问目录,您还需要执行权限。以下是示例:
[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
答案2
在 /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
。