3

I have a "hello world" fastcgi running on 127.0.0.1:9000 and would like to serve it via nginx. I added the following lines to the nginx.conf http block:

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

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

However, instead of getting the output of the fastcgi, I only get a 502 Bad Gateway response.

error_log says: [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"

thpetrus
  • 57
  • 1
  • 1
  • 10

3 Answers3

4

I ran into this same issue when I forgot to convert my CGI to a FastCGI by adding these three lines of output before the CGI's content:

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

This sounds like the actual problem is in your FastCGI application. Have a look at it's error log or other output it might have produced.

In general, it might be that your require more FastCGI configuration, to pass on data to your application. A larger setup might include stuff like those settings:

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;

Again, your FastCGI application's output should tell you more, it could also be a completely nginx-unrelated problem

Theuni
  • 938
  • 5
  • 14
  • The part you posted is provided by `include fastcgi_params;`, you were right with the fastcgi application though. Thanks! – thpetrus Jan 31 '13 at 14:32
0

In case it might help someone else with the same symptoms described above:

In my case, the REQUEST_URI parameter was being configured correctly in a module-specific conf file included from the nginx.conf file. However, because the fastcgi_params file was also being included, the REQUEST_URI was doubly specified. Commenting it out in the fastcgi_params file corrected the problem.