在LNMP(Linux、Nginx、MariaDB、Php-fpm)环境下,当遇到“File not found”错误时,通常意味着服务器无法找到请求的网页或文件。这个问题可能由多种原因引起,但在本案例中,主要原因是文件权限配置不当,导致Nginx和PHP-FPM无法正确地访问和执行项目文件。
我们要理解Nginx和PHP-FPM的用户和用户组。Nginx作为一个网络服务器,通常以特定的用户(如`nginx`)运行,而PHP-FPM(FastCGI进程管理器)则以另一个用户(如`www`)运行。这两个服务需要对网站根目录及其内部文件有足够的权限才能正常工作。在本例中,问题出在PHP-FPM的用户和用户组没有对项目文件有适当的读取和执行(rx)权限,以及某些目录(如`upload`、`log`等)需要读写执行(rwx)权限。
解决这个问题,我们需要进行以下步骤:
1. **创建并调整用户和用户组**:
使用`useradd`命令创建新用户`www`,并且将该用户加入到`www`用户组。同时,将Nginx用户加入到`www`用户组,确保它们都能访问相同的文件。
```
sudo useradd -s /sbin/nologin www
sudo gpasswd -a nginx www
```
2. **修改PHP-FPM配置**:
更新`/etc/php/php-fpm.d/www.conf`中的`user`、`group`、`listen.owner`和`listen.group`,确保它们指向`www`用户和用户组。例如:
```
[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
```
3. **修改Nginx配置**:
在`/etc/nginx/nginx.conf`文件的第一行,设置`user`为`nginx www`,让Nginx以这两个用户身份运行。
4. **调整项目文件权限**:
这里出现了一个特殊情况,即项目文件位于用户`lrcn`的家目录下,导致`www`用户无法访问。这是因为家目录的权限问题。为了解决这个问题,可以将项目移动到如`/var/www`这样的公共目录,然后使用`chown`和`chmod`命令调整文件权限,确保`www`用户有适当的访问权。
例如,如果将项目移动到`/var/www`,可以执行以下操作:
```
sudo mkdir -p /var/www/symfony
sudo chown -R www:www /var/www/symfony
sudo chmod -R 755 /var/www/symfony
```
这样,Nginx和PHP-FPM服务就能正确地识别和处理项目文件,从而解决“File not found”的问题。
总结来说,当在LNMP环境中遇到“File not found”错误时,首要检查的是文件权限配置。确保服务使用的用户和用户组对项目文件有正确的权限,特别是对于需要执行的目录。此外,合理规划文件存储位置,避免因用户权限限制导致的访问问题,也是解决问题的关键。通过以上步骤,应该能够有效地解决此类问题,使网站恢复正常运行。