fastcgi

一、关于CGI & FastCGI

CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等

FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。

FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。

二、为什么要选择FastCGI

基于以上基础内容,我们发现在性能上FastCGI是优于CGI的,因为他启动以后就常驻内存,这也是为什么Nginx选择FastCGI做http传输到PHP解释器之间通信的原因了。参看下面配置实例,Ng监听到9000端口上连接PHP解释器。

location ~ \.php$ {  
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}

三、谁在用怎么用?

Apache - http://www.apache.org

Microsoft IIS - http://www.iis.net/fastcgi/configuration

Microsoft IIS (second generation) - http://www.coastrd.com/Home which supports SIGTERM and the Aprellium Abyss server as well

SunOne - http://www.sun.com/software/products/web_srvr/home_web_srvr.xml

Lighttpd - http://trac.lighttpd.net/trac/wiki/Docs%3AModFastCGI
Premium thttpd http://schumann.cx/premium-thttpd/

MyServer - http://www.myserverproject.net/

Pi3Web - http://pi3web.sourceforge.net/

WebSTAR (Mac OS) - http://www.webstar.com

Nginx - http://wiki.nginx.org/NginxHttpFcgiModule

Cherokee - http://www.cherokee-project.com/

基本上市面上所有支持脚本的服务器都实现了fastCGI接口,没错FastCGI仅仅是一个接口而已。
目前FastCGI官方提供了 C, C++, Perl, and Java四种语言的SDK。
当前下载地址http://www.fastcgi.com/dist/fcgi.tar.gz