FastCGI技术

1         FastCGI介绍

FastCGI:快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与Web服务器通信的协议。
    FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
    FastCGI具有稳定,安全,高性能,方便扩展等优点。
    利用nginx、spawn-fcgi、fcgi就可搭建一个高并发高性能的FastCGI框架。本文将浅析框架的搭建过程。

2         FastCGI技术框架

3         FastCGI搭建

3.1 nginx安装配置

下载nginx源码
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/ nginx / nginx \
--conf-path=/usr/local/ nginx / nginx.conf \
--pid-path=/usr/local/ nginx /nginx.pid \
--error-log-path=/usr/local/ nginx /logs/error.log \
--with-pcre=/root/pcre-8.31 \
--with-zlib=/root/zlib-1.2.7 \
--with-http_dav_module \
--with-http_flv_module  \
--with-http_stub_status_module \
make && make install

nginx.conf的配置为:
daemon  on;

user  root root;

worker_processes  2;

worker_rlimit_nofile 204800;

events {

use epoll;

worker_connections 204800;

}

http {

include       mime.types;

default_type  application/octet-stream;

charset utf-8;

sendfile on;

tcp_nopush     on;

keepalive_timeout 60;

server {

listen       80;

server_name  localhost;

location / {

root   html;

index  index.html index.htm;

}

location /status {

stub_status on;

access_log on;

allow all;

}

location /index.cgi {

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.cgi;

fastcgi_param SCRIPT_FILENAME fcgi$fastcgi_script_name;

fastcgi_param  REMOTE_ADDR        $remote_addr;

fastcgi_param  REMOTE_PORT        $remote_port;

fastcgi_param  SERVER_ADDR        $server_addr;

fastcgi_param  SERVER_PORT        $server_port;

fastcgi_param  SERVER_NAME        $server_name;

include fastcgi_params;

}

error_page   500 502 503 504  /50x.html;

location = /50x.html {

root   html;

}

}

}

3.2 CGI程序

CGI程序可以使用fcgi和cgicc库来实现。

fcgi源码下载:http://www.fastcgi.com/dist/fcgi.tar.gz 
tar –xzvf fcgi.tar.gz
./configure && make
fcgi-2.4.1/libfcgi/.libs 目录会生成:libfcgi.a libfcgi++.a

多线程CGI
参考examples/threaded.c
编译 threaded.c 生成CGI程序。

实现http重定向(http返回码 301 302)可使用cgicc库, cgicc是c++语言的CGI,cgicc支持fastcgi,有重定向的功能。
源码下载: ftp://ftp.gnu.org/gnu/cgicc/cgicc-3.2.9.tar.gz
cgicc与fcgi结合使用,可参考cgicc-3.2.9/contrib./fcgi-test.cpp。

3.3 spawn-fcgi

spawn-fcgi是lighttpd的一个子项目,能够fork多个CGI子进程,并调度完成nginx的fastcgi指令,作为CGI程序的调度管理器。
源码下载: http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
tar –xzvf spawn-fcgi-1.6.3.tar.gz
./configure && make 
cp ./src/spawn-fcgi  /root/ 
spawn-fcgi命令说明:
   -a <address>   bind to IPv4/IPv6 address (defaults to 0.0.0.0)
   -p <port>      bind to TCP-port
   -f <path>      filename of the fcgi-application
   -F <children>   number of children to fork (default 1)
注意:spawn-fcgi fork CGI程序以后,自己就退出了。

下面的命令的意思是,spawn-fcgi监听端口9000,并fork出10个CGI子进程。
/root/spawn-fcgi -a 127.0.0.1 -p 9000 -f /root/CGI  -F 10

4         FastCGI测试

4.1 环境配置

解决TCP TIME_WAIT过多的问题,vim /etc/sysctl.conf 加入以下内容:

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_fin_timeout = 30

/sbin/sysctl -p 让参数生效。

修改最多可打开的文件数: ulimit -n 10000

4.2 CGI进程管理器spawn-fcgi

/root/spawn-fcgi -a 127.0.0.1 -p 9000 -f /root/CGI  -F 10

4.3 安装webbench

webbench最多可以模拟3万个并发连接去测试服务器的负载能力,编译和配置简单,仅基于TCP协议上对服务器进行测试。

源码下载: http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make

4.4 测试用例

1分钟1000个客户端测试

[[email protected] webbench-1.5]# ./webbench -c 1000 -t 60 http://192.168.2.119:80/index.cgi

Webbench - Simple Web Benchmark 1.5

Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://192.168.39.56:80/index.cgi

1000 clients, running 60 sec.

Speed=864321 pages/min, 13456215 bytes/sec.

Requests: 864321 susceed, 0 failed.

时间: 2024-12-07 06:54:31

FastCGI技术的相关文章

【技术分享】网关协议学习:CGI、FastCGI、WSGI

CGI CGI即通用网关接口(Common Gateway Interface),是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程.CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体.通俗的讲CGI就像是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页.CGI 的

部署LNMP 、 Nginx+FastCGI 、 Nginx高级技术

########################################################################################################## LNMP: -L :LINUX操作系统-N :Nginx网站服务软件-M :Mysql Mariadb数据库-P :PHP Python Perl网站开发语言 ###############################################################

LNMP部署、Nginx+FastCGI、Nginx高级技术

1 案例1:部署LNMP环境1.1 问题安装部署Nginx.MariaDB.PHP环境?安装部署Nginx.MariaDB.PHP.PHP-FPM:?启动Nginx.MariaDB.FPM服务:?并测试LNMP是否工作正常.1.2 方案在RHEL7系统中,源码安装Nginx,使用RPM包安装MariaDB.PHP.PHP-FPM软件.操作过程中需要安装的软件列表如下:?nginx [源码](web服务器,接收用户请求)?mariadb(客户端软件mysql).mariadb-server(服务)

部署LNMP Nginx+FastCGI 、 Nginx高级技术

案例1:部署LNMP环境案例2:构建LNMP平台案例3:地址重写1 案例1:部署LNMP环境1.1 问题 安装部署Nginx.MariaDB.PHP环境安装部署Nginx.MariaDB.PHP.PHP-FPM:启动Nginx.MariaDB.FPM服务:并测试LNMP是否工作正常.1.2 方案 在RHEL7系统中,源码安装Nginx,使用RPM包安装MariaDB.PHP.PHP-FPM软件.操作过程中需要安装的软件列表如下:nginxmariadb.mariadb-server.mariad

PHP中CGI,FastCGI,PHP-CGI与PHP-FPM对比

CGI CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上. CGI可以用任何一种语言编写,只要这种语言具有标准输入.输出和环境变量.如php,perl,tcl等. FastCGI FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式).它还支持

概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM 各公共网关接口介绍

CGI CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上. CGI可以用任何一种语言编写,只要这种语言具有标准输入.输出和环境变量.如php,perl,tcl等. FastCGI FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式).它还支持

[转] nginx+FastCGI+c++

from: http://www.cnblogs.com/xiaouisme/archive/2012/08/01/2618398.html 一 安装 目的:不需支持php等.就html就行了.步骤:下载这些东西:Lenovo:~/下载/download4nginx$ ls md5-1.3.0.tgz openssl-1.0.1c.tar.gz zlib-1.2.7.tar.gznginx-1.3.4.tar.gz pcre-8.31.tar.gz 解压缩nginx-1.3.4.tar.gz到~

网关协议学习:CGI、FastCGI、WSGI

CGI CGI即通用网关接口(Common Gateway Interface),是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程.CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体.通俗的讲CGI就像是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页.CGI 的

CGI,FastCGI,PHP-CGI与PHP-FPM(转)

http://www.cnblogs.com/zl0372/articles/php_4.html CGI CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上. CGI本身可以看成是一种协议标准,它可以用任何一种语言编写具体的符合该接口标准的协议存在,只要这种语言具有标准输入.输出和环境变量.如php,perl,tcl等. FastCGI FastCGI像是一个常驻(long-