No input file specified. Nginx PHP
都2022了,再写PHP的文章是不是过时了?现在还坚持搞PHP的不多了吧。
今天按照官方文档安装完Nginx和PHP之后,打开本地localhost,出现了这个错误:No input file specified.
一. 安装 Nginx
系统是Ubuntu-20.04.1,Nginx是通过官方文档 apt 方式安装的,参考官方wiki:Install | NGINX,
Ubuntu系统默认的apt源里是有Nginx的,不过版本不是最新的1.20,而是1.18.按照Nginx官方文档的教程安装最新版本,首先添加Nginx的源,在/etc/apt/sources.list里添加以下代码,或者新建一个/etc/apt/sources.list.d/nginx.list文件添加以下代码
## Replace $release with your corresponding Ubuntu release.
deb https://nginx.org/packages/ubuntu/ $release nginx
#deb-src https://nginx.org/packages/ubuntu/ $release nginx
将代码中的 $release 换成Ubuntu系统版本的代号,比如20.04的代号是 focal,替换后为
deb https://nginx.org/packages/ubuntu/ focal nginx
#deb-src https://nginx.org/packages/ubuntu/ focal nginx
然后执行
sudo apt update
更新 apt 包信息,如果出现以下错误
W: GPG error: https://nginx.org/packages/ubuntu focal InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY $key
是 nginx.org 公钥的问题,其中 $key 是一个数字串,执行以下代码,注意替换$key为上面报错信息里的数字串
## 把 $key 替换成报错的那个数字串
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $key
sudo apt update
不报错的话,apt 源就更新成功了,如图
然后安装nginx。
sudo apt install nginx
安装成功后,启动 nginx。可以通过 nginx命令启动,也可以通过systemctl 启动
sudo systemctl start nginx
二. 安装 PHP
Ubuntu官方apt源里的PHP版本比较旧,PHP官方也没有 apt 源,按官方文档 PHP: Nginx 1.4.x on Unix systems - Manual 只能源码安装了。
通过 PHP: Downloads 下载源码,我下载的是 php-8.0.18.tar.gz ,解压
tar -xzvf php-8.0.18.tar.gz
进入到解压后的目录
cd php-8.0.18/
配置与编译
./configure --enable-fpm --with-mysqli
make
sudo make install
第一步./configure的时候会提示错误,缺少编译器,需要安装gcc,通过 sudo apt install gcc 安装即可。 也可能会提示缺少相关的工具,比如 libxml2, zlib等,同样通过 sudo apt install libxml2 libxml2-dev即可,需要注意的是提示缺少libxml2,光安装libxml2不行,还需要安装 libxml2-dev;安装zlib的时候,zlib的apt包名是 zlib1g,所以通过 sudo apt install zlib1g zlib1g-dev 来安装。其它缺少的包都这样安装就行。
make的时间会稍有点长,一二十分钟吧。
make完会提示让执行make test, 执行 make test 即可。
sudo make install完成后即安装完成了,接下来开始配置。
将源码目录中的 php.ini-development 拷贝到他们正确的位置,这个位置通过 php --ini 命令来查看,这个PHP默认加载php.ini的位置
目录是 /usr/local/lib, 拷贝到此目录
cp php.ini-development /usr/local/lib/php.ini
拷贝 php-fpm 的配置文件和执行文件到指定位置
cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf
cp sapi/fpm/php-fpm /usr/local/bin
当文件不存在时阻止Nginx转发到后端 php-fpm,编辑 php.ini 修改一个配置项
vim /usr/local/lib/php.ini
定位到 cgi.fix_pathinfo=, 去掉前面的分号,修改成
cgi.fix_pathinfo=0
编辑 php-fpm 的配置文件,修改一下 php-fpm 的启动用户和组
vim /usr/local/etc/php-fpm.d/www.conf
找到 user = nobody group = nobody 这里,改成
user = www-data
group = www-data
启动 php-fpm
sudo /usr/local/bin/php-fpm
这里需要加 sudo,不然会提示没有权限。
配置完 PHP 的配置文件 和 php-fpm 的配置文件,接下来配置 Nginx 的配置文件了。
首先找到Nginx的配置文件的位置,通过 nginx -V 命令可以查看。
编辑此文件
sudo vim /etc/nginx/nginx.conf
这个是 nginx 的总配置文件,打开后可以看到有两个重要信息
上面的 error_log 那一行是nginx的错误日志文件的位置,下面的 include 是包含的子配置文件的位置,这个文件以 http {} 为主, 在子配置文件里以 server{}为主,虚拟主机配置可以通过添加子配置文件来设置,打开子配置文件的目录 /etc/nignx/conf.d/ 看以下
只有一个子配置文件 default.conf,编辑此文件
sudo vim /etc/nginx/conf.d/default.conf
添加红框里内容
Nginx 配置完毕,重启一下。
sudo systemctl restart nginx
完事了,建一个 .php 文件测试一下吧。找到 nginx 的 文档根目录,打开 nginx 的配置文件里面有
sudo vim /etc/nginx/nginx.conf
切换到此目录,创建 index.php
cd /usr/share/nginx/html/
rm index.html
vim index.php
输入以下php代码
<?php
phpinfo();
?>
打开浏览器 http://localhost, 结果出现如下错误:
一切都是按照官方文档配置下来的, 就这一个模糊信息,到底是 nginx 的配置有问题,还是 php-fpm的配置或者php的配置有问题?
查看 headers,报的是 404 错误,根目录明明有 index.php,为什么还404错误呢?既然这里错误信息这么模糊,只能去错误日志里看看了。在上面的 /etc/nginx/nginx.conf 配置文件里可以看到 nginx 的错误日志目录在 /var/log/nginx/error.log, 打开此文件的最后看一下
tail /var/log/nginx/error.log
有一个错误,显示FastCGI返回了一个错误,没有找到此文件,/etc/nginx/html/index.php,在 /etc/nginx/conf.d/default.conf 这个配置文件里,明明文档根目录是 /usr/share/nginx/html
为什么会去 /etc/nginx/html 目录去找呢?
考虑到这个root 是在 location / 块里配置的, 新添加的那块是 location ~* \.php$ 块,有没有可能是那个块里也需要指定 root 配置项? 试一下
重启 nginx
sudo systemctl restart nginx
刷新浏览器 http;//localhost,终于出现如下页面
成功解决。
总结:nginx 对于 php 文件的请求会转发给后端的 php-fpm, 但是出现404错误的时候,并没有显示出详细的错误信息,只是显示了一个 No input file specified. 详细的错误信息需要到错误日志里去看。
No input file specified. Nginx PHP相关推荐
- php no input file specified.,nginx+php出现No input file specified解决办法
在自己本地的开发环境突然出现了No input file specified错误,反复检查返现自己的配置文件和配置路径以及权限都没有问题.经过反复的排查终于发现了问题,现将问题及解决分享如下: 问题原 ...
- php启动后no input file specified.,nginx+php出现No input file specified解决办法
今天在自己本地的开发环境突然出现了No input file specified错误,反复检查返现自己的配置文件和配置路径以及权限都没有问题.经过反复的排查终于发现了问题,现将问题及解决分享如下: 问 ...
- window下phpstudy用nginx报错No input file specified. nginx日志The filename, directory name, or volum label
window下phpstudy使用nginx服务报错No input file specified. 但是反复检查路径都是正确没有问题, 切换成Apache时同样的路径有可以正常访问. 遂打开phps ...
- 解决NGINX PHP No input file specified
解决NGINX PHP "No input file specified" 打开一个页面<?php phpinfo(); ?> 然后在游览器下运行:页面提示 No ...
- windows下, nginx 提示错误 No input file specified
一 环境介绍: win10, LNMP 二 错误描述: 访问网站时,提示"No input file specified"错误. 排错阶段: 1. 查看nginx access日 ...
- Nginx配置Thinkphp3.2.3配置,访问Nginx报 No input file specified. 的问题解决
Nginx配置Thinkphp3.2.3配置,访问Nginx报 No input file specified. 的问题解决 参考文章: (1)Nginx配置Thinkphp3.2.3配置,访问Ngi ...
- Nginx执行php,显示“No input file specified. ”的处理方法
使用apt-get install nginx和php-cgi 配置好nginx和php,如果配置的请看网上教程,很多. 在/var/www/nginx-default中放上一份phpinfo.php ...
- nginx php No input file specified 怎样处理?
配置nginx支持php 出现了No input file specified ? 仅仅要改动下安装文件夹下的 nginx.conf下的 location ~ \.php$ { ...
- legend3---用Homestead配置后报错“No input file specified.”
legend3---用Homestead配置后报错"No input file specified." 一.总结 一句话总结: 自己项目上传到github的时候多增加了一层lege ...
- 提示No input file specified的解决方法
(一)IIS Noinput file specified 方法一:改PHP.ini中的doc_root行,打开ini文件注释掉此行,然后重启IIS 方法二: 请修改php.ini 找到 ; cgi. ...
最新文章
- java多线程3.设计线程安全类
- 日常生活小技巧 -- “Error: Encountered an improper argument”的解决方法
- JS判断是否选中的是表格内当前选中的那一行
- boost::locale::generator用法的测试程序
- linux中安装软件,查看、卸载已安装软件方法
- java随机姓名_Java生成随机姓名、性别和年龄的实现示例
- php email 发送,php 发送 Email
- 【狂神说】分析前后端分离开源项目?
- html头部中各式各样的meta
- mysql分段统计ceil
- ElementUI:input表单验证
- win10计算机丢失msvcr,Win10系统打开软件提示丢失msvcr110.dll如何解决
- 事件处理方式on、addEventListener和attachEvent
- pdf拆分成一页一页
- EXCEL密码清除(破解找回密码)——巧用宏代码
- 浏览器白屏原因思路分析
- 读《犹太人教子枕边书》
- Character类的常用方法
- BZOJ1777: [Usaco2010 Hol]rocks 石头木头
- TIA博途WINCC中英文切换的项目中摄氏度符号无法正常显示的解决办法
热门文章
- 《蜗居:心理健康枕边书》摘录
- 在Word中嵌入Mathtype公式编辑器
- f(!gotop.length) return false;
- pythonmd5解密代码_python写一个md5解密器示例,pythonmd5解密器
- 计算机科学中的哲学思想,冯_诺依曼的计算机科学哲学思想.doc
- [buuctf.reverse] 144_[XMAN2018排位赛]easyvm 147_[XNUCA2018]Code_Interpreter
- viper4Android md风格,ViPER4Android音效驱动
- C++ CURL使用
- 第一百二十七期:程序员41岁创业逆袭成全美最受欢迎CEO,公司市值近200亿美金
- 科普一下:1G, 2G, 3G,4G,5G历史发展和定义