一般情况下每个虚拟主机就是一个网站,网站一般通过域名进行访问。最近在配置LNMP (Linux Nginx MariaDB Php-fpm)的时候遇到了1个问题:
访问网站首页始终提升文件未找到。
<强>最终解决后总结一条就是:>强网站根目录的权限问题。
说说事情的起因本。人用的系统是Manjaro Linux系统,所以用一条命令装好LNMP环境:sudo pacman - s mariadb php nginx。刚开始,我把symfony项目放在我的家目录,也就是~/项目。然后我从symfony官方拷贝一份nginx的配置文件symfony.conf,放在了/etc/nginx/网站目录下,然后将根参数更改为/home/lrcn/项目/symfony/公众,并更改了fastcgi_pass参数为unix://php-fpm/php-fpm运行。袜子。好,运行sudo nginx - t测试通过,然后重启nginx。
但问题来了,我在浏览器输入symfony.dev(添加1条为主机127.0.0.1 symfony.dev)始终提示文件未找到。即使我将网站目录设置为777也不行!这个问题把我困扰了一天!真的是心都快爆炸了。最后我深呼吸一口气,然后思考这个问题。果然在找遍互联网资源后得到答案。
是这样解释的.PHP-FPM程序需要有一个用户和用户组来运行这个程序。这个用户和用户组对我的项目文件必须要有rx权限。有些目录还必须具有特权权限,比如上传、日志目录等等.Nginx程序同样需要一个用户,这个用户同样对于这个项目文件具有rx权限。
由于我的nginx默认用户是http,所以我想把它改为nginx,并且把nginx加入www用户组。同时,我把php-fpm的用户改为www,用户组也改为www。
<强> 1)创建用户强>
sudo useradd - s/sbin/nologin www #创建www用户,同时会自动创建www用户组 sudo gpasswd——nginx www #把nginx用户加入到www用户组
<强> 2)修改配置文件
强>
由于我这里只管文件权限相关的配置,其余配置自己还需要调整
# grep”^ ^;”/etc/php/php-fpm.d/www.conf #修改的时候只管修改用户,组,听。的主人,listen.group,其余的都是默认配置 (www) 用户=www 组=www=/运行/php-fpm/php-fpm.sock听 听。老板=www 听。组=www 听。模式=0660 点=动态 点。max_children=5 点。start_servers=2 点。min_spare_servers=1 点。max_spare_servers=3 #/etc/nginx/nginx.conf #在第一行写入,其余的不变 用户nginx www;
<强> 3)修改项目文件权限强>
这一步我发现了一个很诡异的问题,如果我将网站目录放到lrcn用户的家目录的话,www用户始终无法访问这个项目文件,即使我把~/项目设置为了乔恩www: www - r ~/项目,但都不管用,运行测试命令sudo - u www统计~/项目/symfony依旧提示没有权限。我想,应该是/home/lrcn目录的拥有者为lrcn,即使我将它子目录改项目为了www: www,也是不能访问的。这合情合理,所以,我又将项目目录放在了/var/www目录下,然后运行sudo - u www stat/var/www,得到了正常的结果:
[lrcn@lrcn-pc nginx] $ sudo - u www统计/var/www (sudo) lrcn的密码: 文件:/var/www 大小:4096块:8 IO块:4096目录 设备:801 h/2049 d Inode: 3671064硬链接:3 权限(2775/drwxrwsr-x): Uid: (1000/lrcn) Gid: (1001/lrcn) 最近访问:2017-12-10 00:40:04.274947995 + 0800 最近更改:2017-12-10 00:41:34.772321160 + 0800 最近改动:2017-12-10 10:51:15.811999323 + 0800 创建时间:-
如果得到以上信息,证明www用户是可以访问网站根目录的,然后将项目symfony移动到/var/www目录下就可以了。
(lrcn@lrcn-pc var)树www - l 2美元 www └──symfony ├──本 ├──composer.json ├──composer.lock ├──配置 ├──公共 ├──src ├──symfony.lock ├──var └──供应商
好,修改目录权限。我将/var/www目录修改为了lrcn: www,并且在~/projcects目录下创建了一个指向/var/www/symfony的软链接,这样我就可以在家目录操作项目文件。问题是为什么要把/var/www目录的拥有者修改为lrcn,因为这样一来,我可以用lrcn用户来随便操作这个项目文件,lrcn用户是我登录linxu系统的用户,在开发项目,平时使用的时候很方便。
sudo乔恩lrcn: www/var/www - r #更改项目的权限 sudo ln - s/var/www/symfony ~/项目/symfony #在家目录访问项目 sudo chmod 775/var/www - r #让www用户可以操作文件 g + s/var/www sudo chmod - r #以后lrcn用户创建的文件或文件夹都继承了www用户组,而不是lrcn用户组,这个命令很重要LNMP下提示文件未找到问题的解决方法