Lighttpd中CGI执行流程

原文: http://blog.csdn.net/lenky0401/article/details/4201713


对于Lighttpd中CGI执行流程的多余文字不用过多说明,图片里已经基本说的很清楚了。

从图中,我们可以看到对于客户端的每一个请求(动态页面,也就是需要CGI处理的),Lighttpd进程都是先fork一个CGI进程,然后将请求头(通过环境参数)和请求体(通过管道)传递给CGI程序,等待CGI处理并将从CGI进程那接收到的处理结果再响应给客户端,然后将CGI终止(通过发送SIGTERM信号)。

CGI的处理有一些缺点,先不说其它的,单从图中可以看到的就有:首先,对于客户端的每一个请求都需要fork一个CGI进程,然后在该请求处理结束后又将该CGI进程kill掉,性能自然是不高的。其次,Web Server(这里指Lighttpd)和CGI之间通信采用无名管道(PIPE)进行通信,因此具有无名管道的所有缺点(比如:Web Server进程和CGI必须具有亲缘关系;管道是半双工的,数据只能向一个方向流动,因此为了使Web Server和CGI进行双方通信,必须建立起两个管道等等)。由这两个缺点就衍生出很多其它的缺点,比如基本无法进行分布式部署和在CGI侧进行负载均衡等。

所以Lighttpd里除了提供CGI外,还有另外两个选择SCGI和FASTCGI,将陆续会有Lighttpd里的SCGI,FASTCGI等模块的分析内容发出,感兴趣的网友可以关注,:)。

转载保留本博客地址连接[http://blog.csdn.net/lenky0401]。

CGI的相关信息可以查看地址:http://www.w3.org/CGI/

 


============================一个实践的栗子============================

一个lighttpd、CGI的例子

http://www.acmesystems.it/foxg20_cgi

其中,c语言的程序也可以换成脚本语言来写,如WIKIPedia上的例子:

#!/usr/bin/perl

=head1 DESCRIPTION

printenv — a CGI program that just prints its environment

=cut
print "Content-type: text/plain\n\n";

for my $var ( sort keys %ENV ) {
 printf "%s = \"%s\"\n", $var, $ENV{$var};
}

记得修改好配置文件

Hello world example

Save this "Hello world !" source code example in /var/www/cgi-bin (create this directory if it not exists).

#include "stdio.h"
 
int main(void) {
  printf( "Content-Type: text/plain\n\n" );
  printf("Hello world !\n");
  return 0;
}

Compile it typing:

debarm:~# gcc hello.c -o hello.cgi

lighttpd configuration

Change the server.modules list inside /etc/lighttpd/lighttpd.conf in:

server.modules              = (
            "mod_access",
            "mod_cgi",
            "mod_alias",
            "mod_accesslog",
            "mod_compress",
)

and add these lines:

$HTTP["url"] =~ "/cgi-bin/" {
        cgi.assign = ( "" => "" )
}

cgi.assign      = (
        ".cgi"  => ""
)

Restart lighttpd typing:

debarm:~# /etc/init.d/lighttpd restart

Final test

Access with your browser to the FOX Board web page using this URL:

http:///cgi-bin/hello.cgi

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
lighttpd 是一个轻量级的 Web 服务器,它支持 CGI(公共网关接口)来实现动态内容的处理。CGI 是一种通用的协议,它允许 Web 服务器与外部程序(通常是用脚本语言编写的)进行交互,以生成动态的网页内容。 在 lighttpd 启用 CGI 支持,你需要进行以下配置步骤: 1. 确保你已经安装了 lighttpd,并且已经启动了服务器。 2. 编辑 lighttpd 的配置文件,通常位于 /etc/lighttpd/lighttpd.conf。 3. 在配置文件找到 server.modules 部分,并确保 mod_cgi 模块已经被加载。如果没有加载,你可以将类似以下的行添加到配置文件: ``` server.modules += ("mod_cgi") ``` 4. 找到 server.document-root 部分,并设置网页文件的根目录。例如: ``` server.document-root = "/var/www/html" ``` 5. 找到 server.indexfiles 部分,并确保包含了适当的索引文件(例如 index.html 或 index.php)。 6. 找到 cgi.assign 部分,并添加以下行来指定 CGI 脚本的文件扩展名和解释器路径。例如: ``` cgi.assign = ( ".cgi" => "/usr/bin/perl", ".pl" => "/usr/bin/perl", ".php" => "/usr/bin/php-cgi" ) ``` 这个例子,.cgi、.pl 和 .php 扩展名的脚本将分别由 Perl 和 PHP 解释器处理。 7. 保存并关闭配置文件。 8. 重新启动 lighttpd 服务器以使配置生效。 现在,你可以将你的 CGI 脚本放置在指定的网页根目录下,并通过浏览器访问它们。确保你的脚本有可执行权限,并且文件扩展名与配置文件指定的一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值