今天安装linux服务器,运行环境为nginx+php,使用dnf安装。安装过程正常,测试发现静态文件正常,php提示404懵逼了。下面将详细介绍该问题的排查与解决方法。
一、问题现象
安装完成后,测试发现静态文件(如 HTML、CSS、图片等)能够正常访问并展示内容,然而尝试访问 PHP 文件时,浏览器却返回 404 错误,提示找不到文件。
二、排查过程
在本次问题中,日志显示 [error] 16789#0: 1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 39.64.42.48, server:, request: "GET /1.php HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/www.sock:" 。从这段日志可知,FastCGI 在处理 PHP 脚本时出现异常,初步判断可能与权限或配置相关。
2. 检查 Nginx 和 PHP-FPM 的用户配置
分别查看 Nginx 和 PHP-FPM 的配置文件,确认两者的用户设置。
Nginx 用户查看:打开 Nginx 的配置文件(通常在/etc/nginx/nginx.conf 或/etc/nginx/conf.d/.conf ),查找user 指令,查看其配置的用户。在本次问题中,发现 Nginx 配置文件中的用户为root 。
PHP-FPM 用户查看:PHP-FPM 的主要配置文件为/etc/php-fpm.d/www.conf ,在该文件中查找user 和group 指令,查看其配置的用户和组。本次发现 PHP-FPM 配置文件www.conf 中的用户为apache 。由于 Nginx 和 PHP-FPM 使用不同的用户,可能导致文件访问权限问题,从而使 PHP 文件无法正常解析。
3. 查看 Nginx 用户是否存在
在 Linux 系统中,使用以下命令查看指定用户是否存在:
id nginx
如果命令返回用户相关信息,说明nginx 用户存在;若提示 “无此用户”,则需要创建该用户。可以使用以下命令创建nginx 用户:
sudo useradd -r -s /sbin/nologin nginx
其中,-r 选项表示创建系统用户,-s /sbin/nologin 表示该用户不能登录系统。
4. 检查 Nginx 和 PHP-FPM 服务状态
确保 Nginx 和 PHP-FPM 服务处于运行状态且能够正常响应。
检查 Nginx 服务状态:使用以下命令查看 Nginx 服务状态:
sudo systemctl status nginx
如果服务未运行,可以使用以下命令启动 Nginx 服务:
sudo systemctl start nginx
检查 PHP-FPM 服务状态:使用以下命令查看 PHP-FPM 服务状态:
sudo systemctl status php-fpm
若服务未运行,使用以下命令启动 PHP-FPM 服务:
sudo systemctl start php-fpm
-R 选项表示递归修改目录及其子目录和文件的所有者和组。
三、解决问题
将 Nginx 和 PHP-FPM 的用户统一调整为相同用户,例如将 PHP-FPM 的www.conf 文件中的user 和group 均修改为nginx :
user = nginx
group = nginx
修改完成后,重启 PHP-FPM 服务使配置生效:
sudo systemctl restart php-fpm
此时再次访问 PHP 文件,应该能够正常解析和显示内容,404 错误问题得到解决。
通过以上步骤的排查和设置,能够有效解决 Nginx + PHP-FPM 环境中静态文件正常但 PHP 提示 404 的问题。在实际操作中,可根据具体的服务器环境和配置进行适当调整。
上述方案涵盖常见排查点与解决操作。若按此操作问题仍未解决,可分享更多服务器配置或报错细节,我来进一步分析。