LNMP下提示File not found问题的解决方法

前言

一般情况下每个虚拟主机就是一个网站,网站一般通过域名进行访问。最近在配置LNMP(Linux Nginx MariaDB Php-fpm)的时候遇到了1个问题:

访问网站首页始终提升File not found。

最终解决后总结一条就是: 网站根目录的权限问题。

起因

说说事情的起因。本人用的系统是Manjaro Linux系统。所以用一条命令装好LNMP环境: sudo pacman -S mariadb nginx php。刚开始,我把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。好,运行sudo nginx -t测试通过,然后重启nginx。

但问题来了,我在浏览器输入symfony.dev(添加1条hosts为127.0.0.1 symfony.dev)始终提示File not found。即使我将网站目录设置为777也不行!这个问题把我困扰了一天!真的是心都快爆炸了。最后我深呼吸一口气,然后思考这个问题。果然在找遍互联网资源后得到答案。

是这样解释的。PHP-FPM程序需要有一个用户和用户组来运行这个程序。这个用户和用户组对我的项目文件必须要有rx权限。有些目录还必须具有rwx权限,比如upload,log目录等等。Nginx程序同样需要一个用户,这个用户同样对于这个项目文件具有rx权限。

解决方法

由于我的nginx默认用户是http,所以我想把它改为nginx,并且把nginx加入www用户组。同时,我把php-fpm的用户改为www,用户组也改为www。

1)创建用户

sudo useradd -s /sbin/nologin www # 创建www用户,同时会自动创建www用户组
sudo gpasswd -a nginx www # 把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
# 在第一行写入,其余的不变
user nginx www;

3)修改项目文件权限

这一步我发现了一个很诡异的问题,如果我将网站目录放到lrcn用户的家目录的话,www用户始终无法访问这个项目文件,即使我把~/projects设置为了chown www:www ~/projects -R,但都不管用,运行测试命令sudo -u www stat ~/projects/symfony依旧提示没有权限。我想,应该是/home/lrcn目录的拥有者为lrcn,即使我将它子目录projects改为了www:www, 也是不能访问的。这合情合理。所以,我又将项目目录放在了/var/www目录下,然后运行sudo -u www stat /var/www, 得到了正常的结果:

[lrcn@lrcn-pc nginx]$ sudo -u www stat /var/www
[sudo] lrcn 的密码:
 文件:/var/www
 大小:4096   块:8   IO 块:4096 目录
设备:801h/2049d 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]$ tree www -L 2
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系统的用户,在开发项目,平时使用的时候很方便。

sudo chown lrcn:www /var/www -R # 更改项目的权限
sudo ln -s /var/www/symfony ~/projects/symfony # 在家目录访问项目
sudo chmod 775 /var/www -R # 让www用户可以操作文件
sudo chmod g+s /var/www -R # 以后lrcn用户创建的文件或文件夹都继承了www用户组,而不是lrcn用户组,这个命令很重要

更改后的效果:

[lrcn@lrcn-pc symfony]$ ls -al
总用量 108
drwxrwsr-x 10 lrcn www 4096 12月 10 01:14 .
drwxrwsr-x 3 lrcn www 4096 12月 10 00:41 ..
drwxrwsr-x 2 lrcn www 4096 12月 10 00:41 bin
-rwxrwxr-x 1 lrcn www 1146 12月 10 00:41 composer.json
-rwxrwxr-x 1 lrcn www 48074 12月 10 00:41 composer.lock
drwxrwsr-x 3 lrcn www 4096 12月 10 00:41 config
-rwxrwxr-x 1 lrcn www 495 12月 10 00:41 .env
-rwxrwxr-x 1 lrcn www 495 12月 10 00:41 .env.dist
drwxrwsr-x 8 lrcn www 4096 12月 10 00:41 .git
-rwxrwxr-x 1 lrcn www 106 12月 10 00:41 .gitignore
drwxrwsr-x 4 lrcn www 4096 12月 10 00:41 .idea
drwxrwsr-x 2 lrcn www 4096 12月 10 10:42 public
drwxrwsr-x 3 lrcn www 4096 12月 10 00:41 src
-rwxrwxr-x 1 lrcn www 1889 12月 10 00:41 symfony.lock
drwxrwsr-x 4 lrcn www 4096 12月 10 00:41 var
drwxrwsr-x 5 lrcn www 4096 12月 10 00:41 vendor

好了,到这一步基本上解决了网站提示File not found 的问题了。

然后访问网站首页

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

您可能感兴趣的文章:

  • LNMP系列教程之 设置404错误页面
  • LNMP 解决Access Denied错误详细介绍
  • LNMPA遇到504 Gateway time-out错误的解决方法
(0)

相关推荐

  • LNMPA遇到504 Gateway time-out错误的解决方法

    Nginx的特点是处理静态很给力,Apache的特点是处理动态很稳定,两者结合起来便是LNMPA,nginx处理前端,apache处理后端,这样处理静态会很快,处理动态会很稳定. 当我以为安装完成以后便万事大吉,不料更新网站的时候却出现504 Gateway time-out;起初还以为这是偶然,多次尝试后依然出现这样的情况,因此才决定查找解决方法. LNMP面对504 Gateway time-out 因为504 Gateway time-out是Nginx的专属错误,因此起初我以为是ngin

  • LNMP 解决Access Denied错误详细介绍

    处理搭建好LNMP环境之后,呈现了Access Denied错误 搭建好LNMP环境之后,呈现了Access Denied错误,现已扫除掉文件权限的问题也扫除掉是Nginx的问题,而是无法解析PHP的问题. 发现网上的很多大牛都是经过Nginx的log来排查错误,但是翻开nginx.conf发现其实我的log信息不够细致,于是希望可以配置一下log_format 配置Nginx的 log_format ①翻开nginx.conf ②将原来的log_format那一行删掉,用下面这局部交换 log

  • LNMP系列教程之 设置404错误页面

    在之前的文章中分享到"设置301重定向的方法"文章,提到301,那肯定也要说说404错误页面吧.因为我们默认安装了LNMP后404页面不会自动设置,也不会默认到程序的404错误页面,而需要我们手工设置.具体如何设置呢?我们一起往下看. 第一步,编辑 /usr/local/nginx/conf/nginx.conf 文件,在http区域添加下面的代码: 复制代码 代码如下: fastcgi_intercept_errors on; 第二步,编辑你需要添加404页面的网站的conf文件,对

  • LNMP下提示File not found问题的解决方法

    前言 一般情况下每个虚拟主机就是一个网站,网站一般通过域名进行访问.最近在配置LNMP(Linux Nginx MariaDB Php-fpm)的时候遇到了1个问题: 访问网站首页始终提升File not found. 最终解决后总结一条就是: 网站根目录的权限问题. 起因 说说事情的起因.本人用的系统是Manjaro Linux系统.所以用一条命令装好LNMP环境: sudo pacman -S mariadb nginx php.刚开始,我把symfony项目放在我的家目录,也就是~/pro

  • CentOS 7下MySQL服务启动失败的快速解决方法

    今天,启动MySQL服务器失败,如下所示: [root@spark01 ~]# /etc/init.d/mysqld start Starting mysqld (via systemctl): Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe&qu

  • nginx 下安装配置 phpadmin报错的解决方法

    如下所示: 系统版本:centos7.0 64位 NGINX版本:nginx version: nginx/1.9.8 PHP版本:PHP 7.0.0 (cli) (built: Dec  1 2015 17:53:27) ( NTS ) mysql版本:mysqld  Ver 5.7.10 phpmyadmin版本:4.5.2-all-languages 部署完phpmyadmin,访问主页报错: Error during session start; please check your PH

  • win2003安装sqlserver 2000提示无法验证产品密钥的解决方法

    症状 在 Service Pack 4 (SP 4) 运行 Microsoft Windows Server 2003. Microsoft Windows Storage Server 2003 或 Microsoft Windows 2000 在服务器上, 您尝试安装 Microsoft SQL Server 2000 通过卷许可协议 (VLA) 媒体. 执行此操作时,会出现以下错误信息 SQL Server 安装向导的 CD KEY 页上: 无法验证产品密钥 解决方案 警告 如果您修改注册

  • python引用(import)某个模块提示没找到对应模块的解决方法

    自己检查了很多遍,自己写的每错,但是还是报没有找到对应python模块.目录结构如下图所示: __init__.py这个文件需要引入models下的todo_kanban.py文件.__init__内容如下: 写法没问题,但是报错没找到对应模块,经过查找官方文档,需要在被引入(import)的目录下创建一个__init__.py文件,即使 该文件为空也没关系. 以上这篇python引用(import)某个模块提示没找到对应模块的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望

  • window环境下npm install node-sass报错的解决方法

    最近准备想用vue-cli初始化一个项目,需要sass-loader编译: 发现window下npm install node-sass和sass-loader一直报错, window 命令行中提示我全局安装 node-gyp ,有些提示好像是本地找不到python, 于是我按照提示安装node-gyp node-gyp是一个用Node.js编写的跨平台命令行工具,用于编译Node.js的本地插件模块. node-gyp node-gyp官方网址  https://www.npmjs.com/p

  • Python3.5 win10环境下导入kera/tensorflow报错的解决方法

    本文实例讲述了Python3.5 win10环境下导入keras/tensorflow报错的解决方法.分享给大家供大家参考,具体如下: 我在win10 Python3.5.2安装keras,然后导入时报错如下: Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul 5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright&

  • 运行python提示no module named sklearn的解决方法

    在Python中,出现'no module named sklean'的原因是,没有正确安装sklean包.可以使用pip包管理器来安装包,pip包管理器会自动安装包所依赖bai的包而无需额外手动安装,因此十分方便.使用pip包管理器安装包的方法如下: 在命令行中输入:pip install sklean 如果成功安装,会提示"Successfully installed sklean". 其实参考下面的方法 1.安装支持部分: 在terminal里面直接输入以下命令,这个命令会安装s

  • CMD下执行Go出现中文乱码的解决方法

    目录 1.报错信息如下 2.原因分析 3.解决方法 4.封装处理乱码方法 5.解决乱码完整代码 1.报错信息如下 2.原因分析 因为Go的编码是UTF-8,而CMD的活动页是cp936(GBK),因此产生乱码.在中文Windows系统中,如果一个文本文件是UTF-8编码的,那么在CMD.exe命令行窗口(所谓的DOS窗口)中不能正确显示文件中的内容.在默认情况下,命令行窗口中使用的代码页是中文或者美国的,即编码是中文字符集或者英文字符集. 3.解决方法 golang处理中文时默认是utf8,当遇

  • linux普通用户su root切换提示没有文件或目录的解决方法

    1. 首先进入单用户模式: 1). ubuntu : 上述情况可以在grub界面选择第二项修复,但没有grub可以参考: 1.重启ubuntu,随即长按shirft进入grub菜单: 2.选择recovery mode,按"e"键进入编辑页面:如下: 非恢复模式为:   3.将ro recovery nomodeset替换为"rw single init=/bin/bash" (上述的界面中将改为rw single init=/bin/bash) 4.按ctrl+x

随机推荐