6 messages in ru.sysoev.nginxRe: C fast-cgi implementation
FromSent OnAttachments
Huy PhanApr 23, 2009 6:45 pm 
Roger HooverApr 23, 2009 7:59 pm 
Charles McGarveyApr 23, 2009 8:09 pm 
Huy PhanApr 24, 2009 9:51 pm 
Charles McGarveyApr 24, 2009 10:31 pm 
Huy PhanApr 24, 2009 11:20 pm 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: C fast-cgi implementationActions...
From:Charles McGarvey (onef@brokenzipper.com)
Date:Apr 24, 2009 10:31:53 pm
List:ru.sysoev.nginx

Huy Phan wrote:

Charles McGarvey <onefriedrice@...> 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