FastCGI技术

2023-11-06

FastCGI技术

by ahuner

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.


转载于: http://www.cnblogs.com/aHuner/archive/2013/05/27/3102423.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FastCGI技术 的相关文章

  • 多线程中递归锁的实现

    多线程中递归锁的实现 在上一篇文章中 我已经阐述了多线程中简单锁的实现 可在结束的时候 我就提了那么一个问题 那就是如果在一个链表中进行插入时 要进行查询的操作 如果只是简单的锁 是没法实现的 所以 递归锁 就浮现于世了 可能有些人看到递归
  • 如何在C语言中调用shell命令

    如何在C语言中调用shell命令 在linux操作系统中 很多shell命令使用起来非常简单 这些shell命令的程序实现已经被底层实现好 有时候需要在程序中调用shell命令 这样可以就不用在控制台上手动输入shell命令了 下面就以三个
  • linux设备驱动之构造和运行模块

    构造和运行模块 今天开始学习 linux设备驱动程序 第三版这本书 在看到第二章的构造和运行模块的时候 我在linux平台上做了一个小测试 下面就让我说下 在宿主机上安装开发工具和下载linux源码 要求版本号和目标机上的linux内核版本
  • 2.6内核的通用的编译步骤

    2 6内核的通用的编译步骤 1 下载源码并解压 虽然我们可以将内核源码存放在任何自己找得到的地方 但通常还是会将内核源码下载到 usr src目录并解压 cd usr src wget ftp kernel org pub linux ke
  • linux2.6.29 CFS调度详细分析

    linux2 6 29 CFS调度详细分析 众所周知 linux最新的内核采用了CFS的调度机制 网上也有不少文章对CFS调度的源码做了详细的分析 但是大部分的文章太注重细节了 所以没有把CFS的原理进行一下从整体上的概括 基于这个原因 本
  • FastCGI技术

    FastCGI技术 by ahuner 1 FastCGI介绍 FastCGI 快速通用网关接口 Fast Common Gateway Interface FastCGI 是一种让交互程序与Web服务器通信的协议 FastCGI像是一个常
  • linux下保护模式之CPL,RPL,DPL总结

    linux下保护模式之CPL RPL DPL总结 先说下特权级的概念 在保护模式下 系统依靠特权级来实施代码和数据的保护 相当于权限啦 特权级共有4 个级别 0 1 2 3 数字越小特权越高 较为核心的代码和数据放在较高 靠内 的层级中 处
  • 字符设备驱动程序

    字符设备驱动程序 下面以一个简单的例子来讲解下字符设备驱动程序 首先需要有内核环境 Linux下的设备驱动程序被组织为一组完成不同任务的函数的集合 通过这些函数使得Windows的设备操作犹如文件一般 在应用程序看来 硬件设备只 是一个设备
  • x86中内存管理寄存器

    x86中内存管理寄存器 处理器提供了4个内存管理寄存器 GDTR LDTR IDTR和TR 用于指定内存分段管理所用系统表的基地址 如图4 2所示 处理器为这些寄存器的加载和保存提供了特定的指令 GDTR LDTR IDTR和TR都是段基址
  • 秒杀linux下系统调用fork()面试题

    秒杀linux下系统调用fork 面试题 第一道题 在之前博客也写过这道题 http blog csdn net chdhust article details 8535915 题目 请问下面的程序一共输出多少个 1 2 3 4 5 6
  • 提高单机短连接QPS到20万

    提高单机短连接QPS到20万 转载于http weibo com ttarticle p show id 2309404037884855362229 一般的通讯协议在设计上都避免服务器端主动发起TCP连接关闭 让客户端来发起close s
  • gdb调试多进程程序和多线程程序

    gdb调试多进程程序和多线程程序 平时一般用gdb直接调试短小的程序 好像我还没调试过多进程和多线程程序呢 1 gdb调试多进程程序 如果一个进程通过fork系统调用创建了子进程 gdb会继续调试原来的进程 子进程则正常运行 常用的有两种方
  • TCP之Delay Ack和Nagle算法

    TCP之Delay Ack和Nagle算法 1 Delay Ack TCP是可靠传输 可靠的核心是收到包后回复一个ack来告诉对方收到了
  • SO_LINGER选项

    SO LINGER选项 SO LINGER选项用于控制close系统调用在关闭TCP连接时的行为 默认情况下 当我们使用close系统调用来关闭一个socket时 close将立即返回 TCP模块负责把该socket对应的TCP发送缓冲区中
  • dword ptr指令讲解

    dword ptr指令讲解 8086CPU的指令 可以处理两种尺寸的数据 byte和word 所以在机器指令中要指明 指令进行的是字操作还是字节操作 对于这个问题 汇编语言中用一下方法处理 1 通过寄存器名指明要处理的数据的尺寸 例如 下面
  • Linux下C编译系统

    Linux下C编译系统 编译过程概述 了解一些编译知识的读者都知道 所谓编译 就是在编译程序读取源程序 字符流 对之进行词法和语法的分析 将高级语言指令转换为功能等效的汇编代码 再由汇编程序转换为机器语言 并且按照操作系统对可执行文件感谢格
  • DNS在架构设计中的巧用

    DNS在架构设计中的巧用 一 缘起 一个http请求从客户端到服务端 整个执行流程是怎么样的呢 一个典型流程如上 1 客户端通过域名daojia com请求dns server 2 dns server返回域名对应的外网ip 1 2 3 4
  • TCP连接阻塞的监控和处理

    TCP连接阻塞的监控和处理 那么 什么样的TCP连接属于上述发生阻塞的异常连接呢 结合线上运维经验 我们整理出符合该类异常的特征如下 该连接的Recv Q的值特别大 超过3M 该连接的Recv Q的值持续上涨 造成堆积 在一定滑动时间窗口内
  • linux下libxml库的安装及编译

    linux下libxml库的安装及编译 1 下载和安装LIBXML2 Libxml2是个C语言的XML程式库 能简单方便的提供对XML文件的各种操作 并且支持XPATH查询 及部分的支持XSLT转换等功能 Libxml2的下载地址是 htt
  • undefined reference to ceil 链接错误

    undefined reference to ceil 链接错误 原因今天编译一个C文件 输入下面的代码后 GOP12 c文件代码大致为 include

随机推荐

  • C# 当前不会命中断点(调试时不能进入断点)

    相信大家都会遇到这个问题的 而且在我的项目经验中 发生主这个问题的原因特别多 本文把我遇到过的情况都记录下 供大家参考 1 运行调试时模式不对 应该选Debug才能进入断点 如果选择Release是不能的 注意项目属性里的配置也选择成Deb
  • java的背景

    要想学好一门语言 首先得了解这门语言的有什么用 优缺点是什么 才能更好的理解运用 所以 我在此介绍java的基础简介 1 java是以javaee后台开发 java web前台界面构成的体系结构 2 java的优点有 java的平台无关性
  • 用java实现打印功能

    用java实现打印 java awt中提供了一些打印的API 要实现打印 首先要获得打印对象 然后继承Printable实现接口方法print 以便打印机进行打印 最后用用Graphics2D直接输出直接输出 下面代码实现了简单的打印功能
  • android自动点击的实现流程记录

    一个android下自动点击触屏的程序 类似于windows下的按键精灵 自动帮我玩捕鱼达人 目标 用户可以通过配置脚本文件 自定义一系列的操作 例如 点击 长按 拖动 延时 颜色判断 循环 然后用音量 键启动 关闭脚本 思路 1 linu
  • PSO粒子群算法优化BP神经网络(PSO-BPNN)回归预测MATLAB代码

    PSO粒子群算法优化BP神经网络 PSO BPNN 回归预测MATLAB代码 有优化前后的对比 代码注释清楚 main为运行主程序 可以读取本地EXCEL数据 也可以加载本地数据 mat 使用换自己数据集 很方便 容易上手 以电厂运行数据为
  • 网页版音频播放器,歌词随音乐而动

    制作不易 多多支持 谢谢 我的博客里面还有关于视频播放器的 感兴趣的小伙伴可以来看看 这个是效果图 这是利用audio做的一个歌词随音乐而动的html页面 这个简单的音频播放器是用ajax请求本地服务器的lrc文件 lrc文件就是歌词文件
  • Visual Studio 2019 安装并创建运行C++项目

    Visual Studio 2019 安装并创建运行C 项目 一 安装Visual Studio 2019 在官网下载社区版本的VS2019 https visualstudio microsoft com zh hans rr https
  • LeetCode(力扣)63. 不同路径 IIPython

    LeetCode63 不同路径 II 题目链接 代码 题目链接 https leetcode cn problems unique paths ii 代码 class Solution def uniquePathsWithObstacle
  • 2017-2018-1 20155319 《信息安全系统设计基础》第4周学习总结

    2017 2018 1 20155319 信息安全系统设计基础 第4周学习总结 课堂实践内容 1 参考教材第十章内容 2 用Linux IO相关系统调用编写myod c 用myod XXX实现Linux下od tx tc XXX的功能 注意
  • C语言编程获取PE文件导入函数

    include
  • 试题 算法提高 地图 c++

    资源限制 内存限制 256 0MB C C 时间限制 1 0s Java时间限制 3 0s Python时间限制 5 0s 问题描述 炫炫发现了一张藏宝图 图是由一些点和一些连接两个点的边组成的 他知道了每一条边连接哪些点 现在他想知道每个
  • Flutter入门学习(一)在macOS上搭建Flutter开发环境

    开发环境 Mac M1 Xcode Android Studio VSCode 配置Flutter开发环境 按照https flutterchina club 步骤操作即可 如果本地没有 iOS 和 Android 开发环境 建议先安装 X
  • 基于健身-距离平衡和基于学习的人工蜂群的强大优化算法(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 Matlab代码实现 4 参考文献 1 概述 FDB TLABC是一种基于健身 距离平衡
  • OpwnWrt 路由器MWAN3多线多拨实现方法

    OpenWrt上的MWAN3可以支持多根网线或者多个PPPOE账号的同时拨号使用和负载均衡 并且还可以通过Ping方式来检测中断线路并自动屏蔽中断线路 更厉害的是还支持通过IP 端口 甚至配合dnsmasq使用的域名来进行智能的多线路分流
  • 前端面试题:谈一谈vue和react的区别?

    1 从编程范式的角度讲 在vue loader vue template compiler的支持下 vue可以采用SFC单文件组织的方式实现组件化 vue有指令 使用指令能够方便地渲染视图 vue表单是双向绑定的 vue组件是基于选项式的编
  • Matlab 一张图绘制在一个figure里,多张图绘制在一个figure里,和多张图分别绘制在一个figure里(多重子图)讲解及代码

    matlab的绘图可以采用直角坐标系 对数坐标系和极坐标等形式 数据点也可用向量或矩阵形式给出 类型可以是实型或复型 一张图绘制在一个figure里 以实例和代码讲解 在不同图形窗口下分别绘制出y sin x y sin 2x y sin
  • numpy中np.nan(pandas中NAN)

    在处理数据时遇到NAN值的几率还是比较大的 有的时候需要对数据值是否为nan值做判断 但是如下处理时会出现一个很诡异的结果 import numpy as np np nan np nan 此时会输出为False 对np nan进行help
  • 往虚拟机传文件的三种方法

    文件共享方法一 一 创建共享文件夹 这种方法最适合Windows系统 专治各种无法传送问题 共享文件的意义在于可以把宿主机的文件传到虚拟机内 这是VMware 自带的传文件功能 非常好用 前置条件 在宿主机建立一个共享文件夹 操作步骤 1
  • 使用代码操作Excel文件(POI)

    文章目录 本篇文章将讲述使用POI如何去对Excel文件进行读写 1 Maven导入poi包 2 POI进行基本的写入 3 POI进行大量数据的写入 4 POI读取数据 模拟两个案例 本篇文章将讲述使用POI如何去对Excel文件进行读写
  • FastCGI技术

    FastCGI技术 by ahuner 1 FastCGI介绍 FastCGI 快速通用网关接口 Fast Common Gateway Interface FastCGI 是一种让交互程序与Web服务器通信的协议 FastCGI像是一个常