搜索到一篇不错的文章
[afterCode] 终于用正确的方式解决nginx 403 错误
23 Mar 2017
当安装启动好自己的 nginx 服务, 上传好自己的静态文件后. 很多人都会碰到 403 这个错误.
搜索网络基本得到的答案是
服务器的根目录没有 index.html index.htm
index.php 文件
根目录的权限不够
第一个问题很好解决,缺啥补啥; 或者通过 index 指令制定 failover 的文件. 权限不够就各种解法了.
比如
$chmod -R 777 /some/path/
有些比较理智的会和你说权限只要755就可以了啊.但是你发现改了这些还没有用的时候.
就开始尝试修改文件所在用户和用户组. 结果一样没有什么用.
最后你心一横, 直接在 nginx 的配置文件里面 user
root;. 然后站点访问正常就算了.
但是解决正确的方法是什么呢?
当 nginx 使用一个目录作为 root 来使用的时候, 除了需要获得这个目录下所有文件的下的读权限以外,
还需要能够成功的访问到这个路径. 换句话说到达这个目录的每个文件夹, nginx 都要有x权限. 确认是否都有 x 的权限可以使用目录 namei 帮助查找.
[root@cloud test]# namei -l /root/test/index.html
f: /root/test/index.html
dr-xr-xr-x root root / # 第一列 权限 用户 用户组 路径
dr-xr-x--- root root root # /root 目录显然对非组内的用户是没执行权限
drwxr-xr-x root root test
-rwxrwxrwx root root index.html
所以如果不小心你把站点的文件放在 root 的文件夹下, 除了用 root 执行ngxin 或者把 nginx 添加到 root
组真的没有什么其他办法可以解决这样造成的 403 错误了. 所以最好还是为 nginx 在其他更加合适的地方(/home/nginx, /user/share/nginx/html) 存放站点文件.
这里突然想到了一句话来警示自己在解决403权限问题时滥用各种方法乱投医的行为.
优化的方法方法大家都知道, 这只能算1分. 找到真正需要采用这个优化方法的地方才能得到另外的99分.
祝大家都能得到