通过 nginx 提供 fastcgi

通过 nginx 提供 fastcgi

我在 127.0.0.1:9000 上运行了一个“hello world”fastcgi,并希望通过 nginx 为其提供服务。我在 nginx.conf http 块中添加了以下几行:

server {
    listen public.ip.address.here:80;
    server_name $host;

    location / {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
    }
}

但是,我没有得到 fastcgi 的输出,而只得到了 502 Bad Gateway 响应。

error_log 说:[error] 1924#0: *1 upstream prematurely closed FastCGI stdout while reading response header from upstream, client: myIP, server: $host, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "public.ip.address.here"

答案1

这听起来像是您的 FastCGI 应用程序中的实际问题。请查看其错误日志或它可能生成的其他输出。

通常,您可能需要更多 FastCGI 配置来将数据传递给应用程序。更大的设置可能包括以下设置:

fastcgi_param  SCRIPT_FILENAME    $document_root$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;

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  HTTPS              $https if_not_empty;

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;

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

再次强调,你的 FastCGI 应用程序的输出应该会告诉你更多信息,它也可能是一个与 nginx 完全无关的问题

答案2

当我忘记通过在 CGI 内容之前添加以下三行输出将我的 CGI 转换为 FastCGI 时,我遇到了同样的问题:

print "HTTP/1.0 200 OK"
print "Content-type: text/plain"
print ""

答案3

如果它可以帮助其他有上述相同症状的人:

在我的例子中,REQUEST_URI 参数在 nginx.conf 文件中包含的模块特定 conf 文件中配置正确。但是,由于还包含了 fastcgi_params 文件,因此 REQUEST_URI 被重复指定。在 fastcgi_params 文件中将其注释掉可以解决问题。

相关内容