nginx仅能处理静态文件,当遇到php文件时须转发给php-fpm处理,所以项目中的php文件须同时具备给nginx和php-fpm读
与执行
的权限,必要时还要加上写
的权限。nginx和php-fpm的权限来源于它们的执行用户的权限,这里使这二者设置为同一执行用户来统一权限是比较方便的作法。
示范环境:php
sorgo/
uu
,umask
值是0002新建执行用户www
并自带用户组www
,且不可登陆.nginx
useradd www -s /usr/sbin/nologin
将已有的项目管理人员帐号(如:uu
,固然你也能够再建立一个专用的)加入www
组laravel
usermod -G www uu
修改nginx配置文件,变动执行用户为www
,个人环境中该文件路径是:/etc/nginx/nginx.conf
修改php-fpm配置文件,变动执行用户为www
,个人环境中该文件路径是:/etc/php-fpm.d/www.conf
shell
修改完后重启nginx和php-fpm.安全
下面以laravel项目目录为例,只给相关用户必要的权限,又不会像设置777
那样权限过大而存在可能的安全问题。网络
chown -R uu:www sorgo/ #设置归属 chmod -Rf g+s sorgo/ #SGID,新生成文件或文件夹保持与父目录同一权限组 chmod -R 750 sorgo/ #设置具体权限 chmod -R 770 sorgo/storage/ #程序须要写入和建立新文件的加`写`权限
SGID属性对于像laravel框架这种有tinker让开发者在交互式命令行界面调试代码的特别有用。好比你使用tinker新建了一个日志文件,若是没有SGID那这个新日志文件的全部者和全部组会是uu:uu
,这时www
用户执行下的程序要写入东西到这个新日志的话就会因权限受阻而报错;而父目录有SGID属性的则会是uu:www
,同时保证了两个相关的用户都能正常读写。php7
曾经有过各类因权限问题而报错的,基本办法也都是设置777
权限了事,直到后来一次在我一怒之下将整个项目文件都设了777
权限但还报错,真见鬼了,简直要疯掉了。。。
因而才下决心正面解决这个问题,就在网络上找了各类解决方案,有靠谱的也有不靠谱的,以上方案是经我整理实践后确承认靠的方案,但愿对你有用。
若是你还知道更好的方案,也请留言分享出来,谢谢~框架