FastCGI SCRIPT_FILENAME 导致 500 HTTP 错误,这是一个错误吗?

FastCGI SCRIPT_FILENAME 导致 500 HTTP 错误,这是一个错误吗?

在我花了 8 个小时努力让 Nginx 正常工作时,我(终于)跟踪了问题并最终找到了它。我得到了 HTTP 500 ERROR (Internal Server Error)。我操纵了我拥有的每个软件的配置,但没有运气。

无论如何,问题出在将它们包含到主机配置文件中时,FastCGI SCRIPT_FILENAMEFastCGI SCRIPT_NAME2 个变量就导致了 这个 问题500 HTTP ERROR。为了清楚起见,这里有一些我的配置片段。1
.:sites-enabled/default

   location ~ \.php$
    {
    #fastcgi_split_path_info ^(.+\.php)(.*)$;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /usr/share/nginx/www$fastcgi_script_name;
     fastcgi_param  QUERY_STRING     $query_string;
        fastcgi_param  REQUEST_METHOD   $request_method;
        fastcgi_param  CONTENT_TYPE     $content_type;
        fastcgi_param  CONTENT_LENGTH   $content_length;
    #including fastcgi_params, is the root of all evil.
    include /etc/nginx/fastcgi_params;        
    }

2. fastcgi_params,包含的文件(在前面的代码片段中):

fastcgi_param   QUERY_STRING        $query_string;
fastcgi_param   REQUEST_METHOD      $request_method;
fastcgi_param   CONTENT_TYPE        $content_type;
fastcgi_param   CONTENT_LENGTH      $content_length;
#HERE, THE ERROR IS THROWN.
#Commenting the SCRIPT_FILENAME AND SCRIPT_NAME removes the ERROR.
fastcgi_param   SCRIPT_FILENAME     $request_filename;
fastcgi_param   SCRIPT_NAME     $fastcgi_script_name;
fastcgi_param   REQUEST_URI     $request_uri;
fastcgi_param   DOCUMENT_URI        $document_uri;
fastcgi_param   DOCUMENT_ROOT       $document_root;
fastcgi_param   SERVER_PROTOCOL     $server_protocol;

fastcgi_param   GATEWAY_INTERFACE   CGI/1.1;
fastcgi_param   SERVER_SOFTWARE     nginx/$nginx_version;

fastcgi_param   REMOTE_ADDR     $remote_addr;
fastcgi_param   REMOTE_PORT     $remote_port;
fastcgi_param   SERVER_ADDR     $server_addr;
fastcgi_param   SERVER_PORT     $server_port;
fastcgi_param   SERVER_NAME     $server_name;

fastcgi_param   HTTPS           $https;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS     200;

正如我所评论的解决方案看起来很简单,但实际上,注释SCRIPT_NAMESCRIPT_FILENAME破坏了我的代码,因为我正在开发的框架(Codeigniter)正在使用SCRIPT_NAME 来获取我的网站的URL,此外还被SCRIPT_NAME分配给PHP()中的全局变量$_SERVER['SCRIPT_NAME']。所以我无法注释这两行。

那么,这个问题的解决方案是什么?是错误吗?还是只是配置错误?顺便说一句,错误日志没有显示任何有用的信息。

附加信息:
1. 我正在运行 Debian 6。2
. 使用 dotdeb 构建。3
. 使用 PHP5-FPM。3.访问目录时
出现403 HTTP错误。4 .找不到文件时
出现 Codeigniter(框架)的自定义错误。404 HTTP

答案1

根据Nginx 文档,你应该使用:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

并指定你的root目录外部位置块:

server {
  server_name www.domain.com;
  root /var/www/nginx-default/;
  location / {
    [...]
  }

相关内容