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

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

(1)错误的路径

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

server {
    listen   [::]:80;
    server_name  example.com www.111cn.net;
    access_log  /var/www/logs/example.com.access.log; 
 
    location / {
        root   /var/www/example.com;
        index  index.php index.html index.htm;
    }
 
    location /images {
        autoindex on;
    }
 
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/example.com$fastcgi_script_name;
        include fastcgi_params;
    }
}

这个配置中有写地方是错误的。一个明显抓人眼球的错误就是 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”:
 
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

我们应该记住应该在server块内指明根目录。
(2)未正确设置权限
未正确设置根目录的权限。
(3)使用Open Basedir严格限制路径
如果在php.ini严格限制了PHP文件的路径,即使nginx配置正确,也有可能会出现如上错误提示。需要修改php.ini中的“open_basedir =”的值与指定的根目录一致,
(4)文件不存在
确保文件存在。

时间: 2024-11-01 18:42:44

解决Nginx下”No input file specified” 问题的相关文章

nginx php No input file specified 如何处理?

配置nginx支持php 出现了No input file specified ? 只要修改下安装目录下的  nginx.conf下的  location ~ \.php$ {              root           html;              fastcgi_pass   127.0.0.1:9000;              fastcgi_index  index.php;              fastcgi_param  SCRIPT_FILENAME

LNMP提示Nginx PHP “No input file specified”错误

昨天因为服务器到期把网站迁移到另一台服务器,使用的LNMP架构,网站各部分迁移完成后发现了一个蛋疼的问题:很多网页打开都提示"No input file specified",甚至直接404,而且时好时坏. 去网上搜了下资料,大概意思如下: 任何对.php文件的请求,都简单地交给php-cgi去处理,但没有验证该php文件是否存在.PHP文件不存在,没办法返回普通的404错误,它返回 一个404,并带上一句"No input file specified" 另外,还

iis/apache/nginx 提示No input file specified

(一)IIS Noinput file specified 方法一:改PHP.ini中的doc_root行,打开ini文件注释掉此行,然后重启IIS 方法二: 请修改php.ini 找到 ; cgi.force_redirect = 1 去掉前面分号,把后面的1改为0 即 cgi.force_redirect = 0 (二)apacheNo input file specified apache No input filespecified,今天是我们配置apache RewriteRule时出

Nginx报 No input file specified. 的问题解决之路

今天接手公司的一个项目,照例将项目clone下来,配置本地host,nginx,然后访问. 怎么回事?迅速在php的入口文件index.php最上面var_dump(1111),再次刷新,页面仍旧是上面的状态. 没有打印出1111说明并没有执行php文件,然后翻nginx虚拟主机的配置,检查之后确认入口文件的路径和重写规则正确.这是怎么回事呢?? 抓包看http请求和响应,发现nginx返回的是404的状态,但是我明明访问的是/index.php文件啊,怎么还报404呢,这引起了我的好奇心. 然

nginx提示No input file specified怎么办

  1. php.ini(/usr/local/php/etc/php.ini)的配置中中找到 cgi.fix_pathinfo=0 将其改成 cgi.fix_pathinfo=1 2.nginx配置文件/etc/nginx/conf/nginx.conf中注意以下部分  代码如下   location ~ .php$ { fastcgi_pass   127.0.0.1:9000; fastcgi_index  index.php; fastcgi_param  SCRIPT_FILENAME

nginx提示No input file specified问题解决教程

1. php.ini(/usr/local/php/etc/php.ini)的配置中中找到 cgi.fix_pathinfo=0 将其改成 cgi.fix_pathinfo=1  2.nginx配置文件/etc/nginx/conf/nginx.conf中注意以下部分  代码如下 复制代码 location ~ .php$ { fastcgi_pass   127.0.0.1:9000; fastcgi_index  index.php; fastcgi_param  SCRIPT_FILENA

利用Nginx下伪静态规则解决“No input file specified”问题

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 昨天把博客转到了新的空间,解析了域名,今天发现能ping通了,首页能打开,但是点击详细页面的时候却发现网页一片空白,只有一行提示字:No input file specified. 网上搜索了一下,有各种说法,都未能解决.后来找到比较接近成功的解决方法,就是添加如下伪静态规则: RewriteEngine?On RewriteBase?/ R

提示No input file specified的解决方法

  (一)IIS Noinput file specified 方法一:改PHP.ini中的doc_root行,打开ini文件注释掉此行,然后重启IIS 方法二: 请修改php.ini 找到 ; cgi.force_redirect = 1 去掉前面分号,把后面的1改为0 即 cgi.force_redirect = 0 (二)apacheNo input file specified apache No input filespecified,今天是我们配置apache RewriteRule

php提醒 No input file specified错误解决方法

本文转自IT摆渡网欢迎转载,请标明出处 更多php文章请阅读 php程序修复 配置完服务器(IIS + Fastcgi + PHP 5.3.2),运行时候没想到出现"No input file specified"的错误提示,百度了下网上的方法都试了,像屏蔽doc_root.目录加权限.修改缓冲池等等都不凑效,后来自己多方查资料,终于解决了,原来解决办法如此之简单,方法如下: 1.在你的PHP目录下找到php.ini,在里面增加如下一行(重要): fastcgi.impersonate