一、问题说明

最近在学习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的权限

 

参考链接:

https://stackoverflow.com/questions/50495218/open-root-project-static-css-failed-13-permission-denied-nginx

http://linux.vbird.org/linux_basic/0220filemanager.php#import

https://www.cnblogs.com/chengjian-physique/p/8878410.html

https://www.cnblogs.com/liujiacai/p/8695676.html

https://www.cnblogs.com/zhaof/p/5945576.html

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐