1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > No input file specified. Nginx PHP

No input file specified. Nginx PHP

时间:2021-06-03 08:49:00

相关推荐

No input file specified. Nginx PHP

都了,再写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 /packages/ubuntu/ $release nginx#deb-src /packages/ubuntu/ $release nginx

将代码中的 $release 换成Ubuntu系统版本的代号,比如20.04的代号是 focal,替换后为

deb /packages/ubuntu/ focal nginx#deb-src /packages/ubuntu/ focal nginx

然后执行

sudo apt update

更新 apt 包信息,如果出现以下错误

W:GPGerror:/packages/ubuntufocalInRelease:Thefollowingsignaturescouldn'tbeverifiedbecausethepublickeyisnotavailable:NO_PUBKEY$key

是 公钥的问题,其中 $key 是一个数字串,执行以下代码,注意替换$key为上面报错信息里的数字串

## 把 $key 替换成报错的那个数字串sudo apt-key adv --keyserver --recv-keys $keysudo 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-mysqlimakesudo 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.confcp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.confcp 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-datagroup = 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.htmlvim index.php

输入以下php代码

<?phpphpinfo();?>

打开浏览器 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. 详细的错误信息需要到错误日志里去看。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。