【解决nginx显示不全】解决Nginx下”No input file specified” 问题

时间:2019-10-30  来源:nginx  阅读:

如果你在使用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)文件不存在
确保文件存在。

【解决nginx显示不全】解决Nginx下”No input file specified” 问题

http://m.bbyears.com/caozuoxitong/76398.html

推荐访问:
相关阅读 猜你喜欢
本类排行 本类最新