解决Nginx下”No input file specified” 问题

如果你在使用Nginx和php-cgi,在按照一些标准流程安装后,可能会遇到“No input file specified”这样子的错误提示。这种错误通常发生在php-cgi进程无法找到“.php”文件或者执行“SCRIPT_FILENAME”传过来的参数。这篇文章讨论发生这种错误的几个原因和解决方法。

(1)错误的路径

通常而言,文件路径(SCRIPT_FILENAME)设置错误,以致fastCGI进程无法解析。在多数案例中,主要由于Nginx配置 错误造成。很多配置如下:

这个配置中有写地方是错误的。一个明显抓人眼球的错误就是 root 指明“location /”内,当根目录root被定义在这个“location”内,它只是在当前快内生效。而这里的“location /images”这个块就不会适用于其他请求因为它没有被定义在“$document _root”之中。对它来说,设定根目录root就显得多余了。通常,根目录root应该从“location /”移出至“server”块内。这样子,location块就可以继承“server”块中定义的值。当然,如果你想为一个“location”位置定义一个不同的“$document_root”,你可以在根目录“location /”指定一个位置指向。

另一个原因是fastCGI参数“SCRIPT_FILENAME”的值被写死了。如果我们更改的根路径的指向,而这里的值未相应更改,那么php-cgi将返回“No input file specified”的错误,因为它确实无法在写死的路径那里找到找到相应的文件。所以,我们应该这样子设定“SCRIPT_FILENAME”:

我们应该记住应该在server块内指明根目录。

(2)未正确设置权限

未正确设置根目录的权限。

(3)使用Open Basedir严格限制路径

如果在php.ini严格限制了PHP文件的路径,即使nginx配置正确,也有可能会出现如上错误提示。需要修改php.ini中的“open_basedir =”的值与指定的根目录一致,

(4)文件不存在

确保文件存在。

参考文章与拓展阅读:

【1】http://blog.martinfjordvald.com/2011/01/no-input-file-specified-with-php-and-nginx/

【2】http://nginxlibrary.com/resolving-no-input-file-specified-error/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

发表评论