最近在配置LNMP(LinuxNginxMariaDBPhp-fpm)的时候遇到了一个问题。访问网站首页总是提示找不到文件。最后解决后,总结一下就是:网站根目录的权限问题。告诉我为什么会这样。我使用的系统是ManjaroLinux系统。所以安装LNMP环境只需一条命令:sudopacman-Smariadbnginxphp。首先,我将symfony项目放在我的主目录中,即~/projects。然后我从symfony复制了一个nginx配置文件symfony.conf,放在/etc/nginx/sites-available目录下,然后把root参数改成/home/lrcn/projects/symfony/public,并改了fastcgi_pass参数是unix:/run/php-fpm/php-fpm.sock。OK,运行sudonginx-t测试通过,然后重启nginx。但问题来了。当我在浏览器中输入symfony.dev时(添加1台主机为127.0.0.1symfony.dev),总是提示找不到文件。即使我将网站目录设置为777也不起作用!这个问题困扰我一天了!我的心都快要爆炸了。最后我深吸一口气,想了想。果不其然,搜索了所有网络资源后得到了答案。这是它的解释方式。PHP-FPM程序需要有用户和用户组才能运行程序。此用户和用户组必须对我的项目文件具有rx权限。有些目录还必须有rwx权限,比如上传、日志目录等。Nginx程序还需要一个用户,这个用户也有这个工程文件的rx权限。由于我的nginx默认用户是http,所以想改成nginx,把nginx加入www用户组。同时我把php-fpm的用户改成www,用户组改成www。1)创建用户sudouseradd-s/sbin/nologinwww#创建www用户并自动创建www用户组sudogpasswd-anginxwww#将nginx用户添加到www用户组2)修改配置文件,因为我这里只关心文件Permission相关的配置,其他配置需要自己调整#grep"^[^;]"/etc/php/php-fpm.d/www.conf#修改的时候只修改user,组,listen.owner,听。组,其余为默认配置[www]user=wwwgroup=wwwlisten=/run/php-fpm/php-fpm.socklisten.owner=wwwlisten.group=wwwlisten.mode=0660pm=dynamicpm.max_children=5pm.start_servers=2pm.min_spare_servers=1pm.max_spare_servers=3#/etc/nginx/nginx.conf#写在第一行,其余不变usernginxwww;3)我在修改项目文件权限这一步发现了一个很奇怪的问题,如果我把网站目录放在lrcn用户的home目录下,www用户将永远无法访问项目文件,即使我设置了~/projectstochownwww:www~/projects-R,不行,运行测试命令sudo-uwwwstat~/projects/symfony还是提示没有权限。我觉得/home/lrcn目录的属主应该是lrcn,即使我把它的子目录projects改成www:www,也访问不了。这是有道理的。于是,我把项目目录放到了/var/www目录下,然后运行sudo-uwwwstat/var/www,得到了正常的结果:[lrcn@lrcn-pcnginx]$sudo-uwwwstat/var/www[sudo]lrcn的密码:文件:/var/www大小:4096块:8IO块:4096目录设备:801h/2049dInode:3671064硬链接:3权限:(2775/drwxrwsr-x)Uid:(1000/lrcn)Gid:(1001/lrcn)最后访问时间:2017-12-1000:40:04.274947995+0800最后修改时间:2017-12-1000:41:34.772321160+0800最后修改时间:2017-12-1010:51:15.811999323+0800创建时间:-如果得到以上信息,证明www用户可以访问网站根目录,然后将项目symfony移动到/var/www目录下。[lrcn@lrcn-pcvar]$treewww-L2www└──symfony├──bin├──composer.json├──composer.lock├──config├──public├──src├──symfony.lock├──var└──vendorOK,修改目录权限。我将/var/www目录改为lrcn:www,并在~/projects目录下创建了一个指向/var/www/symfony的软链接,这样我就可以在home目录下操作工程文件了。问题是为什么要把/var/www目录的属主改成lrcn,因为这样我就可以随便用lrcn用户来操作这个工程文件了。lrcn用户就是我登录linxu系统的用户。我通常在开发项目时使用它。的时候很方便。sudochownlrcn:www/var/www-R#更改项目权限sudoln-s/var/www/symfony~/projects/symfony#访问主目录下的项目sudochmod775/var/www-R#允许www用户操作filesudochmodg+s/var/www-R#lrcn用户创建的文件或文件夹会继承www用户组,而不是lrcn用户组。这个命令非常重要。更改后的效果:[lrcn@lrcn-pcsymfony]$ls-altotalusage108drwxrwsr-x10lrcnwww4096Dec1001:14.drwxrwsr-x3lrcnwww4096Dec1000:41..drwxrwsr-x2lrcnwww4096Dec1000:41bin-rwxrwxr-x1lrcnwww1146Dec1000:41composer.json-rwxrwxr-x1lrcnwww48074Dec1000:41composer.lockdrwxrwsr-x3lrcnwww4096Dec1000:41config-rwxrwxr-x1lrcnwww495Dec1000:41.env-rwxrwxr-x1lrcnwww495Dec1000:41.env.distdrwxrwsr-x8lrcnwww4096Dec1000:41.git-rwxrwxr-x1lrcnwww106Dec1000:41.gitignoredrwxrwsr-x4lrcnwww4096Dec1000:41.ideadrwxrwsr-x2lrcnwww4096Dec1010:42publicdrwxrwsr-x3lrcnwww411096Dec:4-rwxrwxr-x1lrcnwww1889年12月10日00:41symfony.lockdrwxrwsr-x4lrcnwww4096December1000:41vardrwxrwsr-x5lrcnwww4096December1000:41vendor好了,这一步基本解决了网站提示找不到文件的问题。然后访问网站首页:有什么问题可以到评论区留言哦!谢谢!
