殇帝刘玢你 发表于 2018-11-8 08:46:52

nginx报错“No input file specified”

  最近买了台海外的vps做***,使用一键lnmp后改了一下nginx的配置文件,测试php页面发现返回“No input file specified”,查站点日志报错如下

  状态码是404,提示找不到该文件,但在站点目录下确实有index.php文件,且提示是在access日志里,所以是php_cgi找不到php文件。
  修改php的主配置文件php.ini,修改cgi.fix_pathinfo=0为cgi.fix_pathinfo=1,开启cgi解析,然后修改nginx的主配置文件nginx.conf,修改fastcgi_param SCRIPT_FILENAME ;字段为
  fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;
  到此访问php文件正常。
  之前一直百度方法,发现文章都差不多,后面×××谷歌才查到解决方法。
  这里开启cgi.fix_pathinfo是为CGI提供pathinfo功能,但开启后的弊端是,可以通过利用请求php文件来获取图片文件代码,然后将恶意代码伪装成图片上传(前提是网站可以上传图片)。
  设置nginx.conf文件fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name,这里的$document_root意思是php脚本文件的请求目录为站点根目录。
  fastcgi_param参数详解:
  fastcgi_paramSCRIPT_FILENAME    $document_root$fastcgi_script_name;#脚本文件请求的路径
  fastcgi_paramQUERY_STRING       $query_string; #请求的参数;如?app=123
  fastcgi_paramREQUEST_METHOD   $request_method; #请求的动作(GET,POST)
  fastcgi_paramCONTENT_TYPE       $content_type; #请求头中的Content-Type字段
  fastcgi_paramCONTENT_LENGTH   $content_length; #请求头中的Content-length字段。
  fastcgi_paramSCRIPT_NAME      $fastcgi_script_name; #脚本名称
  fastcgi_paramREQUEST_URI      $request_uri; #请求的地址不带参数
  fastcgi_paramDOCUMENT_URI       $document_uri; #与$uri相同。
  fastcgi_paramDOCUMENT_ROOT      $document_root; #网站的根目录。在server配置中root指令中指定的值
  fastcgi_paramSERVER_PROTOCOL    $server_protocol; #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
  fastcgi_paramGATEWAY_INTERFACECGI/1.1;#cgi 版本
  fastcgi_paramSERVER_SOFTWARE    nginx/$nginx_version;#nginx 版本号,可修改、隐藏
  fastcgi_paramREMOTE_ADDR      $remote_addr; #客户端IP
  fastcgi_paramREMOTE_PORT      $remote_port; #客户端端口
  fastcgi_paramSERVER_ADDR      $server_addr; #服务器IP地址
  fastcgi_paramSERVER_PORT      $server_port; #服务器端口
  fastcgi_paramSERVER_NAME      $server_name; #服务器名,域名在server配置中指定的server_name
  #fastcgi_paramPATH_INFO         $path_info;#可自定义变量
  #fastcgi_paramREDIRECT_STATUS    200;

页: [1]
查看完整版本: nginx报错“No input file specified”