CentOs7Nginx+php-fpm出现访问php文件404 not found

本文详细解析了Nginx配置中FastCGI遇到的'Primary script unknown'错误,通过修改nginx.conf文件中关于PHP的配置,将'scripts'更改为'$document_root',成功解决了文件未找到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提

1.nginx成功安装并跑起来了
2.php安装成功且php-fpm成功运行
3.netstat -antp | grep :80 and netstat -antp | grep :9000 ,80和9000端口处于监听状态

问题

[root@xxx ~] # curl -i http://localhost/test.php
HTTP/1.1 404 Not Found
Server: nginx/1.14.0
Date: Fri, 19 Oct 2018 06:38:47 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.6.38

File not found.

通过HTTP的响应头信息,可以看到nginx和php环境是正常的,只是文件未找到。当然我们排除那种文件路径写错的低级情况,这个自行检查。除了文件路径写错以外,最有可能的问题,就是nginx.conf文件配置错误了

我们到nginx/logs/error.log中看看日志文件,如下:

2018/10/19 14:38:47 [error] 26905#0: *5 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost"

看log我们知道,log说FastCGI[这就是php-fpm]在读响应头的输出流中找不到primary script了,这个问题比较蛇皮了,具体primary script 脚本到底是那个脚本我不知道,但是可以确定是我们的nginx配置写的有问题了,去看看nginx.conf中关于php的配置

location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }

默认情况下,nginx对于php的配置就是如上,其中/scripts有点奇怪,这里是配置一个路径,/scriptsg更像是一个绝对路径的写法,但是ls查看一下根目录发现并没有这么一个文件,所以primary scripts找不到罪魁祸首就是他,把/scripts改为$document_root,然后重启nginx就可以了。
这里我写了一个test.php,循环输出I love you10次,下面是成功后的访问:

[root@epaper nginx]# curl http://localhost/test.php
0I love you1I love you2I love you3I love you4I love you5I love you6I love you7I love you8I love you9I love you[root@epaper nginx]# 
<think>首先,用户的问题是:在Linux系统中遇到'php-fpm: command not found'错误,试图查找解决方法。用户想知道如何在Linux下解决php-fpm命令未找到的问题。 我需要参考系统提供的引用内容,这些是关于php-fpm安装、配置和问题的引用。让我回顾一下: - 引用[1]:描述如何安装php-fpm,包括下载、解压、配置和运行命令。 - 引用[2]:解决启动php-fpm时的问题,如配置文件缺失和配置错误。 - 引用[3]:显示一个错误日志,指出配置文件中未知条目。 - 引用[4]:提供重启php-fpm的命令,针对不同Linux发行版(如CentOS、Ubuntu)。 - 引用[5]:解决内存问题,通过配置内存限制。 用户的问题是“php-fpm: command not found”,这通常意味着php-fpm没有被安装,或者安装路径不在系统的PATH环境变量中。 我的回答需要结构化,帮助用户逐步解决问题。确保回答真实可靠,使用中文。 步骤: 1. **确认安装状态**:首先,检查php-fpm是否已安装。 2. **检查安装方法**:如果没有安装,提供安装指南。 3. **检查PATH环境变量**:如果已安装但命令未找到,可能需要检查PATH或将php-fpm路径添加到PATH。 4. **针对不同发行版**:Linux有不同的发行版,安装和命令可能不同(如使用yum、apt等)。 5. **提供命令示例**:使用代码块显示命令。 6. **生成相关问题**:在回答末尾,添加相关问题。 回答结构: - **引言**:简要解释错误原因。 - **步骤1:检查php-fpm是否安装**:提供命令来检查。 - **步骤2:安装php-fpm**:如果没有安装,指导如何安装,基于不同发行版。 - **步骤3:检查安装路径**:如果安装但命令未找到,检查路径或添加PATH。 - **步骤4:启动php-fpm**:安装后如何启动。 - **总结**:确保问题解决。 最后,生成相关问题。 使用引用:在回答中自然地添加引用标识。例如,提到安装方法时引用[1],重启命令时引用[4]。 确保LaTeX语法正确:用户的问题不涉及数学表达式,所以可能不需要太多LaTeX。但如果有数学内容,使用$...$或$$...$$。 现在,构建回答。</think>### Linux下解决“php-fpm: command not found”错误的方法 当您在Linux系统中遇到“php-fpm: command not found”错误时,这通常表示php-fpmPHP FastCGI Process Manager)未被正确安装,或其可执行文件路径未包含在系统的PATH环境变量中。此问题常见于新安装的PHP环境或配置错误。我将一步步指导您解决此问题,确保过程清晰可靠。以下步骤基于常见Linux发行版(如CentOS、Ubuntu、Debian),并参考了相关文档和实践经验。 #### 步骤1: 检查php-fpm是否已安装 首先,确认php-fpm是否已安装在您的系统中。使用终端运行以下命令: ```bash # 检查php-fpm包是否安装(适用于基于RPM的系统如CentOS) rpm -qa | grep php-fpm # 或检查可执行文件是否存在(通用方法) which php-fpm || find / -name php-fpm 2>/dev/null ``` - 如果输出显示类似 `php-fpm-7.4.3` 的结果,表示已安装。 - 如果输出为空或提示“未找到”,则说明php-fpm未安装,请继续步骤2。 - 如果找到路径(如 `/usr/sbin/php-fpm`),但命令仍不可用,可能是PATH问题,请跳至步骤3。 #### 步骤2: 安装php-fpm 如果php-fpm未安装,根据您的Linux发行版选择安装方法。安装过程需要root权限(使用`sudo`或切换到root用户)。 - **对于CentOS/RHEL系统(使用yum/dnf包管理器)**: ```bash sudo yum install epel-release # 确保EPEL仓库可用 sudo yum install php-fpm # 安装php-fpm ``` 安装后,验证是否成功: ```bash php-fpm -v # 应输出版本信息,如PHP 7.x ``` - **对于Ubuntu/Debian系统(使用apt包管理器)**: ```bash sudo apt update # 更新包列表 sudo apt install php-fpm # 安装默认版本的php-fpm # 如需特定版本(如PHP 7.4),使用:sudo apt install php7.4-fpm ``` 验证安装: ```bash php-fpm7.4 -v # 替换为您的版本号 ``` 参考引用[1],安装后需配置和启动服务。如果安装过程中出现错误(如依赖问题),检查系统日志(`journalctl -xe`)[^1]。 #### 步骤3: 检查PATH环境变量(如果已安装但命令未找到) 如果步骤1确认php-fpm已安装,但命令仍不可用,可能是其路径未添加到PATH。执行以下操作: 1. **查找php-fpm可执行文件路径**: ```bash sudo find / -name php-fpm 2>/dev/null # 常见路径如 /usr/sbin/php-fpm 或 /opt/php/bin/php-fpm ``` 示例输出:`/usr/sbin/php-fpm` 2. **将路径添加到PATH环境变量**: - 临时添加(仅当前会话有效): ```bash export PATH=$PATH:/usr/sbin # 替换为实际路径 php-fpm -v # 测试命令是否生效 ``` - 永久添加(编辑bash配置文件): ```bash echo 'export PATH=$PATH:/usr/sbin' >> ~/.bashrc # 或 /etc/profile 全局生效 source ~/.bashrc # 重新加载配置 ``` 参考引用[2],路径问题常见于自定义安装或配置文件缺失时[^2]。 #### 步骤4: 启动和验证php-fpm服务 安装后,启动服务并检查状态: - **启动php-fpm**: ```bash # CentOS/RHEL 7+ sudo systemctl start php-fpm # Ubuntu/Debian sudo service php-fpm start # 或 sudo systemctl start php7.4-fpm(指定版本) # 验证服务状态 sudo systemctl status php-fpm # 应显示"active (running)" ``` - **测试功能**: 创建一个测试PHP文件(如 `/var/www/html/info.php`),内容为 `<?php phpinfo(); ?>`,然后通过浏览器访问。如果显示PHP信息,表示php-fpm运行正常。 参考引用[4],重启或重载服务命令在发行版间有差异(如`systemctl reload php-fpm`用于重载配置)[^4]。 #### 常见问题排查 - **配置文件错误**:如果启动失败,检查配置(如 `/etc/php-fpm.conf` 或 `/etc/php/7.4/fpm/pool.d/www.conf`)。错误如“unknown entry 'pm'”需修正语法[^3]。 - **权限问题**:确保php-fpm用户(如`www-data`或`nginx`)有权限运行: ```bash sudo chown -R www-data:www-data /var/www # 示例路径 ``` - **内存限制**:如果服务崩溃,调整内存设置(编辑配置文件中的`php_admin_value[memory_limit] = 128M`)[^5]。 完成以上步骤后,错误应被解决。如果问题持续,提供更多系统信息(如`uname -a`和`cat /etc/os-release`),以便深入诊断。 ### 相关问题 1. 如何配置php-fpm以优化性能并减少内存占用? 2. 在Nginx或Apache中如何集成php-fpm? 3. php-fpm启动失败时,如何分析日志和错误信息? 4. 不同PHP版本(如PHP 5.6 vs PHP 8.0)下安装php-fpm有哪些差异? 通过以上步骤,您应该能解决“php-fpm: command not found”问题。确保操作前备份重要数据,避免意外配置错误[^1][^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

angelavor

觉得有收获,给我个三连吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值