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个客户端测试

[root@localhost 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.

一、什么是fastCGI
fastCGI是与语言无关、可伸缩架构的CGI开放扩展;
其主要行为是将CGI解释器进程保持在内存中进行管理调度,因此获得较高的性能;
二、fastCGI的工作原理
Web Server启动时载入fastCGI进程管理器;
fastCGI进程器自身初始化,启动多个CGI解释器进程并等待来自Web Server的连接;
当客户端请求到达Web Server时,fastCGI进程管理器选择并连接到一个CGI解释器;
fastCGI子进程完成处理后将标准输出和错误信息从同一连接后返回Web Server;
三、fastCGI + nginx架构的缺陷
nginx下fastCGI与服务器是分离的;
fastCGI需要使用spawn-fcgi或者php-fpm来管理;

四、安装fastCGI
下载地址https://github.com/FastCGI-Archives/FastCGI.com,这个我找了一下午才找到。。。
下载后得到FastCGI.com-master.zip
解压unzip FastCGI.com-master.zip
进入文件夹cd FastCGI.com-master.zip/
再进入cd original_snapshot/
把这个文件移到你的工作目录mv fcgi-2.4.1-SNAP-0910052249.tar.gz /xxx/xxx
然后解压它tar -xvzf fcgi-2.4.1-SNAP-0910052249.tar.gz
进入得到的目录cd fcgi-2.4.1-SNAP-0910052249/
安装
./configure
make
make install
————————————————

转载地址:https://www.cnblogs.com/duanxz/p/4112171.html

https://blog.csdn.net/weixin_44816732/article/details/104237535?utm_medium=distribute.pc_relevant_t0.none-task-blog-OPENSEARCH-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-OPENSEARCH-1.nonecase

FastCGI 使用介绍相关推荐

  1. FAST-CGI安装与使用

    FastCGI 像是一个常驻 (long-live) 型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去 fork 一次 (这是 CGI 最为人诟病的 fork-and-execute ...

  2. cgi web 调用多次启动_CGI、FastCGI和PHPFPM有什么关系呢?

    文章来自:php自学中心网站 链接:http://www.startphp.cn/front/php/0108111.html 作者:磊丰 商务合作:请加微信(QQ):2230304070 文章正文 ...

  3. cgi与php的区别,fastcgi与cgi的区别

    fastcgi与cgi有什么不同 前言 现在的CGI基本没人使用,不安全以及性能极其低下,越来越多的使用web内置扩展.fastCGI.例如微软iis的ISAPI,apache的php模块,nginx ...

  4. Nginx FastCGI的运行原理

    一.FastCGI 1.介绍 CGI全称通用网关接口 Commmon Gateway Interface 用于HTTP服务上的程序服务通信交流的一种工具,CGI程序须运行在网络服务器上. 传统CGI接 ...

  5. linux 安装 fastcgi,linux下fastcgi安装配置

    1.下载安装 从http://archive.apache.org/dist/httpd/下载apache_1.3.6.tar.gz 从http://www.fastcgi.com/下载mod_fas ...

  6. web服务选择lighttpd,采用fcgi组件技术扩展处理业务层

    目录 一.简介fcgi:web和web服务器间数据传输的桥梁... 2 二.源码编译配置ARM Lighttpd Fastcgi C.. 3 [1]交叉编译.源文件都从官网下载. Fcgi light ...

  7. html请求接口_通用网关接口-FastCGI介绍

    一.概述 FastCGI 实际上是增加了一些扩展功能的 CGI .是 CGI 的改进,描述了客户端和Web服务器程序之间传输数据的一种标准. FastCGI 致力于减少Web服务器与CGI程序之间进行 ...

  8. FastCGI 介绍

    本文主要介绍 FastCGI 的相关知识.首先简要看一下 CGI (百科) CGI(通用网关接口) CGI 是Web 服务器运行时外部程序的规范,  按CGI 编写的程序可以扩展服务器功能. CGI ...

  9. CGI与FastCGI介绍

    当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html.事物总是不 断发展,网站也越来越复杂, ...

  10. 三个轻量级WebServer--lighttpd,thttpd,shttpd介绍

    国内绝大部分的web server不是IIS就是Apache,而论市场占有率,我认为Apache是大赢家了,至少是占据了半壁江山. 但除了IIS/Apache外,其实我们有很多选择,对于高负载/大并发 ...

最新文章

  1. oracle测试环境表空间清理
  2. linux系统中建立网络白名单,Linux下设置防火墙白名单(RHEL 6和CentOS 7)的步骤
  3. ActiveMQ实现负载均衡+高可用部署方案
  4. pytorch基础知识整理(四) 模型
  5. java hive 查询语句,使用java连接hive,并执行hive语句详解
  6. 排序算法以及其java实现
  7. matlab win10 gpu加速,win10的Edge浏览器设置GPU硬件加速,大幅度提升浏览器性能
  8. 数量词a lot of、much、many、a little、a few_29
  9. 商业智能SAAS走向中小企业
  10. [swift] LeetCode 96. Unique Binary Search Trees
  11. HTML背景颜色长宽高怎么设置,Dreamweaver 8怎么通过代码设置页面高宽颜色
  12. 台湾ICPlus IP178G/GH/GI 8接口FE以太网交换机芯片详细介绍
  13. 三泰串口卡linux驱动,工业多串口卡.pdf
  14. 军事 - [纪录片]古兵器大揭秘
  15. 7-2 jmu-python-汇率兑换
  16. 不是maf格式的somatic突变数据就没办法读入到maftools了么
  17. 画好了一个杯子,哈哈!
  18. 微信公众号监听 关注/取消关注事件 消息接收与响应处理(比较细微)
  19. HM代码阅读2:AMVP预测函数Void TEncSearch::xEstimateMvPredAMVP()
  20. ActiveMQ 无法启动 提示端口被占用,永远无法杀掉进程

热门文章

  1. OJ:一道考察多态的题目
  2. BZOJ3881 Coci2015 Divljak fail树+差分
  3. 如何检查linux 下是否安装java(jdk)环境
  4. 什么是延展性(Malleability,可鍛性)
  5. linux安装perl模块
  6. 怎样使用Javascript操作XMLDOM才能兼容IE、FireFox浏览器呢?
  7. BGP中的环路和次优路径问题
  8. Kubernetes详解(二)——Kubernetes结构与资源对象
  9. 关于忘记SYSKEY密码后清除密码操作
  10. bash下常用快捷键以及Linux内部帮助文档的使用