Fork me on GitHub

After code
  • Geeker
  • Gamer
  • JS
  • C
  • Node
  • React
  • Hippop
  • TDD
That Is An Byte of Me

[afterCode] 终于用正确的方式解决nginx 403 错误

23 Mar 2017

当安装启动好自己的 nginx 服务, 上传好自己的静态文件后. 很多人都会碰到 403 这个错误. 搜索网络基本得到的答案是

  1. 服务器的根目录没有 index.html index.htm index.php 文件
  2. 根目录的权限不够

第一个问题很好解决,缺啥补啥; 或者通过 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分.

祝大家都能得到💯

分享到: QQ空间 新浪微博 腾讯微博 微信 更多
comments powered by Disqus