LNMP下提示File not found问题的解决方法
前言
一般情况下每个虚拟主机就是一个网站,网站一般通过域名进行访问。最近在配置LNMP(LinuxNginxMariaDBPhp-fpm)的时候遇到了1个问题:
访问网站首页始终提升Filenotfound。
最终解决后总结一条就是:网站根目录的权限问题。
起因
说说事情的起因。本人用的系统是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。好,运行sudonginx-t测试通过,然后重启nginx。
但问题来了,我在浏览器输入symfony.dev(添加1条hosts为127.0.0.1symfony.dev)始终提示Filenotfound。即使我将网站目录设置为777也不行!这个问题把我困扰了一天!真的是心都快爆炸了。最后我深呼吸一口气,然后思考这个问题。果然在找遍互联网资源后得到答案。
是这样解释的。PHP-FPM程序需要有一个用户和用户组来运行这个程序。这个用户和用户组对我的项目文件必须要有rx权限。有些目录还必须具有rwx权限,比如upload,log目录等等。Nginx程序同样需要一个用户,这个用户同样对于这个项目文件具有rx权限。
解决方法
由于我的nginx默认用户是http,所以我想把它改为nginx,并且把nginx加入www用户组。同时,我把php-fpm的用户改为www,用户组也改为www。
1)创建用户
sudouseradd-s/sbin/nologinwww#创建www用户,同时会自动创建www用户组 sudogpasswd-anginxwww#把nginx用户加入到www用户组
2)修改配置文件
由于我这里只管文件权限相关的配置,其余配置自己还需要调整
#grep"^[^;]"/etc/php/php-fpm.d/www.conf #修改的时候只管修改user,group,listen.owner,listen.group,其余的都是默认配置 [www] user=www group=www listen=/run/php-fpm/php-fpm.sock listen.owner=www listen.group=www listen.mode=0660 pm=dynamic pm.max_children=5 pm.start_servers=2 pm.min_spare_servers=1 pm.max_spare_servers=3 #/etc/nginx/nginx.conf #在第一行写入,其余的不变 usernginxwww;
3)修改项目文件权限
这一步我发现了一个很诡异的问题,如果我将网站目录放到lrcn用户的家目录的话,www用户始终无法访问这个项目文件,即使我把~/projects设置为了chownwww: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-L2 www └──symfony ├──bin ├──composer.json ├──composer.lock ├──config ├──public ├──src ├──symfony.lock ├──var └──vendor
好,修改目录权限。我将/var/www目录修改为了lrcn:www,并且在~/projcects目录下创建了一个指向/var/www/symfony的软链接,这样我就可以在家目录操作项目文件。问题是为什么要把/var/www目录的拥有者修改为lrcn,因为这样一来,我可以用lrcn用户来随便操作这个项目文件,lrcn用户是我登录linxu系统的用户,在开发项目,平时使用的时候很方便。
sudochownlrcn:www/var/www-R#更改项目的权限 sudoln-s/var/www/symfony~/projects/symfony#在家目录访问项目 sudochmod775/var/www-R#让www用户可以操作文件 sudochmodg+s/var/www-R#以后lrcn用户创建的文件或文件夹都继承了www用户组,而不是lrcn用户组,这个命令很重要
更改后的效果:
[lrcn@lrcn-pcsymfony]$ls-al 总用量108 drwxrwsr-x10lrcnwww409612月1001:14. drwxrwsr-x3lrcnwww409612月1000:41.. drwxrwsr-x2lrcnwww409612月1000:41bin -rwxrwxr-x1lrcnwww114612月1000:41composer.json -rwxrwxr-x1lrcnwww4807412月1000:41composer.lock drwxrwsr-x3lrcnwww409612月1000:41config -rwxrwxr-x1lrcnwww49512月1000:41.env -rwxrwxr-x1lrcnwww49512月1000:41.env.dist drwxrwsr-x8lrcnwww409612月1000:41.git -rwxrwxr-x1lrcnwww10612月1000:41.gitignore drwxrwsr-x4lrcnwww409612月1000:41.idea drwxrwsr-x2lrcnwww409612月1010:42public drwxrwsr-x3lrcnwww409612月1000:41src -rwxrwxr-x1lrcnwww188912月1000:41symfony.lock drwxrwsr-x4lrcnwww409612月1000:41var drwxrwsr-x5lrcnwww409612月1000:41vendor
好了,到这一步基本上解决了网站提示Filenotfound的问题了。
然后访问网站首页
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。