一、问题说明
最近在学习nginx,遇到一个问题
在浏览器键入 http://192.168.21.161:1234/video/aaa.mp4
访问虚拟机(191.168.21.161)的nginx资源时报如下错误:
2019/08/27 03:50:38 [error] 1453#0: *19 open() "/root/video/aaa.mp4" failed (13: Permission denied), client: 192.168.21.1, server: lsc.com, request: "GET /video/aaa.mp4 HTTP/1.1", host: "192.168.21.161:1234", referrer: "http://192.168.21.161:1234/video/aaa.mp4"
这是我的server设置 ,nginx安装目录为/usr/local/nginx
server {
listen 1234;
server_name lsc.com;
location / {
root lsc.com;
index index.html;
}
location /video {
root /root
index aaa.mp4;
}
# 这种写法和上面的匹配的路径是一样的
# location /video {
# alias /root/video
# index aaa.mp4;
# }
location
}
报错很明确,open() "/root/video/aaa.mp4" failed (13: Permission denied),因为没有aaa.mp4的权限,所以无法打开
但是我检查了一下aaa.mp4文件的权限,有读取文件的权限啊,为什么说Permission denied呢?
这个是nginx进程信息
nginx.conf中我没有设置user,nginx启动的用户/用户组就是默认的nobody/nobody
二、解决过程
我在浏览器中访问其实相当于以nobody用户去访问linux上的/root/video/aaa.mp4。
这块权限我没太理解,然后google了下,
然后,我检查了下/root文件夹,/video文件夹的权限
主要看最后3位(other),video权限没问题(有rx),root都是-,说明没有权限
所以解决方法就是,chmod o+rx /root
等等,不是只要有r的权限就可以了吗,为什么还要加上x?我开始也是这么想的,经过实践发现必须得加x才行(其实上面那段英文回答已经说的很清楚了,这里我想把知识和我以前看过的东西串联起来,又去翻了下之前看过的书)
好几年前我刚接触linux的时候,把电子版《鸟哥的linux私房菜》70%左右章节都看过并实践了。现在想起来当时在看权限那个部分,有一段话,当时没完全理解,所以现在才会产生这样的疑问。我现在把官网(文章链接见文末)上的那一段截个图出来:
解决该问题的关键点:
用户在拥有什么权限的情况下能够读取一个目录下的文件?使用者要对该目录有x权限(也就是能够让该目录成为工作目录,能cd过去),然后还要r的权限
参考链接:
http://linux.vbird.org/linux_basic/0220filemanager.php#import
https://www.cnblogs.com/chengjian-physique/p/8878410.html