Fastcgi.conf
server.modules += ( "mod_fastcgi" )
###############################################################fastcgi.server = ( ".fcgi" =>(
fastcgi.debug = 1
fastcgi.server = (
".fcgi" => (
"local" => (
"socket" => "/tmp/fcgi.socket",
"checklocal" => "disable",
"bin-path" => server_root + "/cgi-bin/zb.fcgi",
"idle-timeout" => 20,
"min-procs" => 1,
"max-procs" => 1
)
)
)
##############################################################
fastcgi程序和Lighttpd之间的通讯是通过 "socket" => "/tmp/fcgi.socket"
用 "bin-path" => server_root + "/cgi-bin/zb.fcgi"
程序来处理。fastcgi程序编译成功后放入到cgi-bin目录中,注意,该程序正确时,才能正确运行Lighttpd和cgi两个进程,否则都不能成功。
在该配置文件中加入alias.url += ( "/cgi-bin" => server_root + "/cgi-bin" ),才能在当前cgi-bin目录中找到程序
附加fastcgi程序示例
static void *Doit(void *a)
{
int rc, i, thread_id = (int)a;
pid_t pid = getpid();
FCGX_Request request;
char *server_name;
FCGX_InitRequest(&request, 0, 0);
for (;;)
{
static pthread_mutex_t accept_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t counts_mutex = PTHREAD_MUTEX_INITIALIZER;
/* Some platforms require accept() serialization, some don't.. */
pthread_mutex_lock(&accept_mutex);
rc = FCGX_Accept_r(&request);
pthread_mutex_unlock(&accept_mutex);
if (rc < 0)
break;
ParseRequest(&request);
#if 0
server_name = FCGX_GetParam("SERVER_NAME", request.envp);
FCGX_FPrintF(request.out,
"Content-type: text/html\r\n"
"\r\n"
"<title>FastCGI Hello! (multi-threaded C, fcgiapp library)</title>"
"<h1>FastCGI Hello! (multi-threaded C, fcgiapp library)</h1>"
"Thread %d, Process %ld<p>"
"Request counts for %d threads running on host <i>%s</i><p><code>",
thread_id, pid, THREAD_COUNT, server_name ? server_name : "?");
///sleep(2);
pthread_mutex_lock(&counts_mutex);
++counts[thread_id];
for (i = 0; i < THREAD_COUNT; i++)
FCGX_FPrintF(request.out, "%5d " , counts[i]);
pthread_mutex_unlock(&counts_mutex);
#endif
FCGX_Finish_r(&request);
}
return NULL;
}
int main(void)
{
int i, result;
pthread_t id[THREAD_COUNT];
FCGX_Init();
for (i = 1; i < THREAD_COUNT; i++)
pthread_create(&id[i], NULL, Doit, (void*)i);
Doit(0);
}
ParseRequest(&request); 根据你自己的情况去改写该函数进行解析即可