2

I'm trying to run an Nginx with FASTCgi to handle request through C app backend.

I'm using this tutorial: http://www.kutukupret.com/2010/08/20/nginx-fastcgi-hello-world-in-c/

My nginx configuration file:

server
  {
    listen 80;
    listen [::]:80 default ipv6only=on;

    server_name localhost;

    location /
    {
      fastcgi_pass   127.0.0.1:8000;

      fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
      fastcgi_param  SERVER_SOFTWARE    nginx;
      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_FILENAME    $document_root$fastcgi_script_name;
      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  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;
    }
  }

My C File "hello.c":

#include <fcgi_stdio.h>
int main( int argc, char *argv[] )
{
   while( FCGI_Accept() >= 0 ) {
      printf( "Content-Type: text/plainnn" );
      printf( "Hello world in Cn" );
   }
   return 0;
}

I compile the C file with the FastCGI dev kit and it generates a hello binary file.

Finally I run this line: spawn-fcgi -a 127.0.0.1 -p 8000 -n /var/www/example.com/bin/hello

But when I put in the browser http://localhost it throws a "502 Bad Gateway".

Can someone bring me some light?

4 Answers 4

5

Your printf line has errors -

printf( "Content-Type: text/plainnn" );

should be -

printf( "Content-Type: text/plain\r\n\r\n" );

Note the \r\n\r\n This is a mandatory separator between HTTP headers and the HTTP body.

Sign up to request clarification or add additional context in comments.

Comments

4

I would advise to look at nginx error logs:

sudo tail -f /var/log/nginx/error.log

I was getting the same error, but with a C++ server which was using CppCMS library and a unix socket to communicate with nginx. From the error log I could see that there was a problem with the file permissions of the socket file:

2014/05/28 14:52:01 [crit] 1818#0: *172 connect() to unix:/tmp/fcgi-socket failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /server HTTP/1.1", upstream: "fastcgi://unix:/tmp/fcgi-socket:", host: "localhost:8080"

just setting them to 777 solved the issue for me.

1 Comment

A quick review of nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls shows that you should never, ever use 777 to "fix" these sorts of issues. Proper server management requires understanding of users, groups, and permissions; which are beyond the scope of this one StackOverflow comment.
0

Its look like your php5-fpm is not running om 8000 port as you included in nginx conf

fastcgi_pass   127.0.0.1:8000;

You can verify your php5-fpm is running on that port by using following commands

grep -Hr "8000" /etc/php5/fpm/pool.d

For setup php5-fpm on 8000 open following file and change listen to 8000 port

vim etc/php5/fpm/pool.d/www.conf

now search listen and replace it with following line

listen = 127.0.0.1:8000

Save the file and restart php5-fpm

4 Comments

Hi, thanks for your response but I'm not using PHP, just Nginx and a binary C to handle request through FASTCgi.
Make sure port 8000 is open by using netstat -ntluap | grep 8000
Crosscheck your fastcgi is listening on port 8000 or 9000
Yes, I've previously check the ports and both are open :(
0

I experienced the same error in the past. The configuration below worked for me.

location / {
    include fastcgi_params;
    fastcgi_pass  localhost:8000;
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.