C fast-cgi implementation

Charles McGarvey onefriedrice at brokenzipper.com
Sat Apr 25 09:32:16 MSD 2009


Huy Phan wrote:
> Charles McGarvey <onefriedrice at ...> writes:
>
>   
>> http://www.fastcgi.com/drupal/node/5
>>
>> Download the "Development Kit" which includes a C library implementation
>> of FastCGI and C/C++ examples.  The library is very easy to learn, so
>> you should be up and running quickly.  Read the fcgiapp.h file to get going.
>>
>> Cheers,
>> Chaz
>>
>>     
>
> Thanks for this page, 
> I see that Nginx has the module NginxHttpFcgiModule which allows Nginx to
> interact with FastCGI processes, but we have to start the fastcgi server myself. 
> I wrote the code with FastCGI Dev Kit but don't know how to start the FastCGI
> server with it.
> The document from fastcgi.com only mentions about servers that support FastCGI
> and execute itself.
>   
Here's some sample code to help you get started (may not compile but you
get the idea):

#include <fcgiapp.h>

int main()
{
    int sockfd = FCGX_OpenSocket("/var/run/myfcgiserver.sock", 1024);
    FCGX_Request request;

    FCGX_Init();
    FCGX_InitRequest(&request, sockfd, 0);

    while (FCGX_Accept_r(&request) == 0)
    {
        FCGX_FPrintF(request.out, "Content-type: text/html\r\n"
                "\r\n")
            "<h1>Hello World!</h1>");
        FCGX_Finish_r(&request);
    }
}

You're right, nginx won't start your fastcgi server for you, so just run
it yourself.  Personally, I find it easy enough to just create an init
script for any fcgi app I want running.

Then configure nginx something like this:

        location ~ fcgi-bin/.*$ {
            include /etc/nginx/fastcgi_params;
            fastcgi_pass    unix:/var/run/myfcgiserver.sock;
            fastcgi_index    whatever;
        }

With this, any request to yourserver/fcgi-bin/... will be sent to your
fastcgi server.

One final note: If you want to use TCP rather than a unix socket, change
the first argument of FCGX_OpenSocket to ":portnum" (i.e. ":2000" -- you
need the colon).  Then use "fastcgi_pass  yourfcgiserver:2000;" in the
nginx config.

Hope that helps..
--Chaz







More information about the nginx mailing list