Nginx|Nginx 访问静态文件403,404错误

背景:
最简单的添加了一个用户 useradd kevin
然后修改了nginx.conf,如下:
server {
listen80;
server_namelocalhost;
location /test/ {
root/home/kevin/;
indexindex.html index.htm;
}
}
然后在/home/kevin/下添加了一个图片33.jpg
启动nginx,访问 120.xxx.xxx.xxx/test/33.jpg,报错403 forbidden

解决:
1.先确保关闭防火墙,经验证,不关闭防火墙,访问不了
先查看防火墙状态 :firewall-cmd--state //注意-cmd前面没有空格
然后关闭防火墙:systemctlstop firewalld
2.确保使用的是nginx.conf,有可能是使用的是同目录下的nginx.default.conf,这一步没验证过不确定
先关闭nginx:
/usr/local/nginx/sbin/nginx-squit
在执行指定配置文件启动nginx:
/usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.conf
3.应该是访问权限不够,所以先查看kevin目录的权限:ls-lkevin
Nginx|Nginx 访问静态文件403,404错误
文章图片

看到是可读的,就很奇怪,索性修改权限:chmod -R 755kevin/
Nginx|Nginx 访问静态文件403,404错误
文章图片

可以看到比上面的多出了 x可执行权限
很关键的一步,确实需要权限,不然无法访问

3.继续访问 120.xxx.xxx.xxx/test/33.jpg,继续报错,不过不是403,是404 not found
403是权限问题,而404则是找不到文件,也就是配置文件有误或者url 有误
检查nginx.conf发现是url 写错了,这个配置文件的意思是?:把test拼接到/home/kevin/后面

location /test/ {
root/home/kevin/;
把test拼接到/home/kevin/后面,也就是url带test时,会匹配成/home/kevin/test ,那么404就很明显了,我只在kevin下有一个33.jpg,除非我在kevin下新建test/33.jpg,不然就会报错
既然这样那就直接访问120.xxx.xxx.xxx/33.jpg , 就是访问/home/kevin/33.jpg ,同时把配置文件中的/test/ 改成 /
重载下配置文件./nginx-sreload

再访问120.xxx.xxx.xxx/33.jpg,OK,成功!

【Nginx|Nginx 访问静态文件403,404错误】

    推荐阅读