Chinaunix首页 | 论坛 | 博客
  • 博客访问: 926861
  • 博文数量: 335
  • 博客积分: 10287
  • 博客等级: 上将
  • 技术积分: 3300
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-08 15:29
文章分类

全部博文(335)

文章存档

2015年(4)

2014年(15)

2013年(17)

2012年(11)

2011年(12)

2010年(96)

2009年(27)

2008年(34)

2007年(43)

2006年(39)

2005年(37)

我的朋友

分类: C/C++

2009-12-02 14:49:28

vi lighttpd.conf
1.添加允许执行的FastCGI扩展名
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" , ".cgi", "fastcgi")
 
2.增加Lighttpd能够解析FastCGI服务的语句
fastcgi.server            = (
        "/test" => (
          "test.fastcgi.handler" => (
     "socket" => "/tmp/test.fastcgi.socket",
     "check-local" => "disable",
     "bin-path" => "/data/www/webroot/cgi-bin/test.fastcgi",
     "min-procs" => 1,
     "max-procs" => 30,
     "idle-timeout" => 30
          )
        )
                            )
3.编写C的FastCGI
// gcc -I/usr/include/fastcgi -lfcgi testfastcgi.c -o test.fastcgi
#include 
#include 
#include 
#include 
#include 
#define LISTENSOCK_FILENO 0
#define LISTENSOCK_FLAGS 0
int main(int argc, char** argv) {
  openlog ("testfastcgi", LOG_CONS|LOG_NDELAY, LOG_USER);
  int err = FCGX_Init (); /* call before Accept in multithreaded apps */
  if (err) { syslog (LOG_INFO, "FCGX_Init failed: %d", err); return 1; }
  FCGX_Request cgi;
  err = FCGX_InitRequest(&cgi, LISTENSOCK_FILENO, LISTENSOCK_FLAGS);
  if (err) { syslog (LOG_INFO, "FCGX_InitRequest failed: %d", err); return 2; }
  while (1) {
    err = FCGX_Accept_r(&cgi);
    if (err) { syslog (LOG_INFO, "FCGX_Accept_r stopped: %d", err); break; }
    char** envp;
    int size = 200;
    for (envp = cgi.envp; *envp; ++envp) size += strlen(*envp) + 11;
    char*  result = (char*) alloca(size);
    strcpy (result, "Status: 200 OK\r\nContent-Type: text/html\r\n\r\n");
    strcat (result, "testcgi
    \r\n"); for (envp = cgi.envp; *envp; ++envp) { strcat(result, "
  • "); strcat(result, *envp); strcat(result, "
  • \r\n"); } strcat(result, "
\r\n"); FCGX_PutStr(result, strlen(result), cgi.out); FCGX_Finish_r(&cgi); } FCGX_ShutdownPending(); return 0; }
4.编译并运行
gcc -I/usr/include/fastcgi -lfcgi testfastcgi.c -o test.fastcgi
在IE中输入:
如果成功,即可看到如下信息:
  • FCGI_ROLE=RESPONDER
  • SERVER_SOFTWARE=lighttpd/1.4.22
  • SERVER_NAME=test.eoa.kdn:8080
  • GATEWAY_INTERFACE=CGI/1.1
  • SERVER_PORT=8080
  • SERVER_ADDR=102.108.15.119
  • REMOTE_PORT=16977
  • REMOTE_ADDR=61.135.159.208
  • SCRIPT_NAME=/test
  • PATH_INFO=
  • SCRIPT_FILENAME=/data/www/webroot/test
  • DOCUMENT_ROOT=/data/www/webroot
  • REQUEST_URI=/test
  • QUERY_STRING=
  • REQUEST_METHOD=GET
  • REDIRECT_STATUS=200
  • SERVER_PROTOCOL=HTTP/1.1
  • HTTP_ACCEPT=*/*
  • HTTP_ACCEPT_LANGUAGE=zh-cn
  • HTTP_ACCEPT_ENCODING=gzip, deflate
  • HTTP_USER_AGENT=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)
  • HTTP_HOST=202.108.15.19:8080
  • HTTP_CONNECTION=Keep-Alive
 
参考文章:
阅读(3202) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~