牛下载:绿色软件官方软件免费下载基地!
所在位置:首页 > 新闻资讯 > Nginx报No input file specified错误解决方法

Nginx报No input file specified错误解决方法

发布时间:2020-03-24 21:41:01来源:阅读:

由于某些原因,服务器重启了,然而重启之后,再次访问居然报404错了:No input file specified.nginx配置没有动过,怎么会无缘无故出现这个问题呢?

这个其实是很常见的错误,百度随便一搜就有好多的答案,解决问题的方案都是重新配置nginx,使它能正确找到php文件。这个也是我早就知道的,既然发了这篇文章,就说明用那些方法不能解决,或者就不是nginx配置方面的问题。那么还有什么原因造成这个现象呢?

nginx做了虚拟主机配置,访问其他的站点,更奇怪的是有些可以访问,有些也报404.总结了下规律,发现如果index到html等静态文件,就没有问题,如果index到php文件,那就不行了。

不知道什么原因的话,那就控制变量一步一步来吧。

首先在根目录下建一个文件:a.php,写个简单的输出hello world的程序。

<?php

echo "hello world" ;

然后试着访问下http://chenqinghe.com/a.php。不行,还是报404.

再建个文件:1.txt,随便打些内容,再次访问。正常返回了!

这就奇怪了,nginx配置没有改过,肯定是能够找到php文件的,那为什么还不行呢?

又搜了下,发现了这篇文章:Nginx报 No input file specified. 的问题解决之路(http://m.aliyun.com/yunqi/articles/34240)

我立马看了下根目录下面有没有.user.ini文件,让人失望的是,没有发现……

无奈之下想到了杀手锏strace,之前用来追踪mysql长连接时用过,可以看进程的系统调用。那用strace追踪一下看看咯,设置php-fpm为静态模式,子进程数量固定为1,然后用strace追踪这个子进程,然后访问网址,观察调用情况。

sudo strace -p 2773 -s 1000 //绑定pid为2773的进程,设置字符串长度为1000

然后发现了些猫腻:

Nginx报No input file specified错误解决方法

原来是open_basedir捣的鬼!!这个php.ini中的设置会把打开文件目录限定在设置的目录内,如上图红框内所示,不在这个目录里,就不允许访问,所以会报这个错。在php.ini中把这项注释了之后,正常了!

那么为什么重启服务器之后会这样呢?后来仔细想想,之前在用/dev/urandom生成真随机数的时候设置的,那时候设置完了之后只在命令行下执行了php的命令,也就是只用了cli这个sapi,并没有重启php-fpm,所以当时没有发现这个问题,这次重启服务器之后,这个问题就暴露了出来,果然是个大坑啊……

这篇文章主要记录了排查错误的方式,更多的时候这些排查方式比解决方案更有用,所以记录下来。

反对
收藏
  • 热门资讯
  • 最新资讯
  • 应用排行榜
  • 游戏排行榜