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

1.下载安装fcgi

# wget  http://www.fastcgi.com/dist/fcgi.tar.gz

# tar zxvf  fcgi.tar.gz

# cd ./fcgi-2.4.1-SNAP-0311112127

# ./configure
#    make
#    make install

注意安装会报错

fcgio.cpp:50: error: 'EOF' was not declared in this scope

参考:
http://qichunren.iteye.com/blog/609351

https://bugs.gentoo.org/256654?id=256654

解决办法:

在/include/fcgio.h文件中加上 #include <cstdio>,然后再编译安装就通过了。

--------------------

php-fpm 

她同样也是一个PHP FastCGI管理服务器,是只用于PHP的

可以在 http://php-fpm.org/download 下载得到

她是PHP源代码的一个补丁,必须将她patch到你的PHP源代码中,在编译安装PHP后才可以使用

2.spawn-fcgi运行fcgi

安装spawn-fcgi

spawn-fcgi是一个通用的FastCGI管理服务器

她是lighttpd中的一部份,但目前已经单独成为一个项目,最新的lighttpd没有这一块,但可以在以前版本中找到她

在lighttpd-1.4.15( http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz )中就有她

Note注:最新的spawn-fcgi可以到lighttpd.net网站搜索“spawn-fcgi”找到她的最新版本发布地址

目前她的下载地址是http://redmine.lighttpd.net/news/2 最新版本是

# wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
# tar -zxvf spawn-fcgi-1.6.3.tar.gz
# cd spawn-fcgi-1.6.3
# ./configure
# make
# make install

=====或者安装lighttpd==========

# tar -zxvf lighttpd-1.4.15.tar.gz
# cd lighttpd-1.4.15
#./configure

# make

因为我不需要安装lighttp而是只需要他其中的某个文件,所以只make就可以了,不需要make install

# cp src/spawn-fcgi /usr/local/bin/spawn-fcgi

取出spawn-fcgi的程序

=============================

执行PHP-cgi

下面我们就可以使用 spawn-fcgi 来控制php-cgi的FastCGI进程了

#  /usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u nobody -g nobody -f /usr/local/php/bin/php-cgi

执行成功返回pid

查看进程

# ps aux

或者

# ps -A|grep php-cgi
 8929 ?        00:00:00 php-cgi
 8930 ?        00:00:00 php-cgi
 8931 ?        00:00:00 php-cgi
 8932 ?        00:00:00 php-cgi
 8933 ?        00:00:00 php-cgi
 8934 ?        00:00:00 php-cgi



绑定nginx

nginx默认web文件夹在配置文件中

#cd /usr/local/nginx/conf
修改nginx.conf,加入如下语句:
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
}

启动nginx

# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

注意这里

Server API CGI/FastCGI

就不是FPM/FastCGI,可以参考下面这个文章就是FPM/FastCGI,,异曲同工:

64位Linux编译安装Nginx+PHP(phpfpm)

=============================================================

启动其他cgi

#  /usr/local/bin/spawn-fcgi -f  -a 192.168.1.10 -p 10000 -F 4 -P /usr/www/tinyfastcgi.fastcgi -u nobody -g nobody

参数含义如下

-f <fcgiapp> 指定调用FastCGI的进程的执行程序位置,根据系统上所装的CGI的情况具体设置
 -a <addr> 绑定到地址addr
 -p <port> 绑定到端口port
 -s <path> 绑定到unix socket的路径path
 -C <childs> 指定产生的FastCGI的进程数,默认为5(仅用于PHP)
 -P <path> 指定产生的进程的PID文件路径
 -u和-g FastCGI使用什么身份(-u 用户 -g 用户组)运行,如nobody、apache等

3.安装fcgiwrap

其实fcgiwrap与spawn-fcgi的关系。spawn-fcgi是网上现成的封装了fcgiwrap的工具,可以下载直接使用。如果下载fcgiwrap,可以自己编写脚本。有些帖子让spawn-fcgi启动fcgiwrap是错误的。

如果要研究fcgiwrap可以如下安装

wget http://github.com/gnosek/fcgiwrap/tarball/master  -P /usr/locl/src  
    tar zxvf gnosek-fcgiwrap-1.1.0-0-g333ff99.tar.gz -P /usr/local/src  
    cd /usr/local/src/gnosek-fcgiwrap-333ff99  
    autoreconf -i  
    ./configure  
    make  
    # 复制fcgiwrap  
    cp fcgiwrap /usr/local/bin
中间有报错:

undefined reference to rpl_malloc

解决办法:

vi config.h.in  
    undef malloc  
    # 这这行注释  
    /* #undef malloc */

运行CGI

# /usr/local/bin/spawn-fcgi -f /usr/local/bin/fcgiwrap -a 192.168.1.10 -p 10000 -F 32 -P /tmp/fastcgi-c.pid -u nobody -g nobody

spawn-fcgi: child exited with: 8
spawn-fcgi: child spawned successfully: PID: 5277
spawn-fcgi: child spawned successfully: PID: 5278
spawn-fcgi: child spawned successfully: PID: 5279

4.spawn-fcgi运行fastcgi代码

#include "fcgi_stdio.h"
#include <stdio.h>
#include <stdlib.h>
int count;
void initialize(void)
{count=0;
}
void main(void)
{initialize();while (FCGI_Accept() >= 0)   {printf("Content-type: text/html "" ""<title>FastCGI Hello! (C, fcgi_stdio library)</title>""<h1>FastCGI Hello! (C, fcgi_stdio library)</h1>""Request number %d running on host <i>%s</i> ",++count, getenv("SERVER_HOSTNAME"));}
}

编译

#  gcc -o tinyfastcgi.cgi tinyfastcgi.c -lfcgi

或者这样编译

# gcc -I/usr/include/fastcgi -lfcgi hello.cpp -o echo.fastcgi

编译生成hello.cgi程序,然后调用spawn-fcgi使得程序以fastcgi方式运行(具体底层运行方式由fastcgi实现,我们不用考虑)

运行
# /usr/local/bin/spawn-fcgi -f  -a 192.168.1.10 -p 10000 -F 4 -P /usr/www/tinyfastcgi.fastcgi -u nobody -g nobody

绑定

然后配置nginx.conf文件

location ~ \.cgi$ {fastcgi_pass 127.0.0.1:2222;#rewrite (.*).cgi /$1 break;fastcgi_param SCRIPT_FILENAME /usr/local/nspnp/html/$fastcgi_script_name;fastcgi_index index.cgi;}
location ~ \.cgi$ {fastcgi_pass 127.0.0.1:2222;#rewrite (.*).cgi /$1 break;fastcgi_param SCRIPT_FILENAME /usr/local/nspnp/html/$fastcgi_script_name;fastcgi_index index.cgi;}

location指令中指定将cgi后缀名的请求转发给2222端口(上面spawn-fcgi指定的端口),然后用浏览器访问127.0.0.1/hello.cgi,就可以看到结果了。
这里仅仅是一个最简单的功能演示,表单的交互还在研究中,cgicc封装了很好用的处理网页元素的方法,推荐使用。

参考:

spawn-fcgi运行fcgiwrap   http://wiki.nginx.org/Fcgiwrap  nginx c/c++ fastcgi支持

C++写一个简单的fastcgi程序

FastCGI服务器的安装和使用(spawn-fcgi和php-fpm)
fastcgi中的多线程使用

FastCGI 技术介绍

FAST-CGI安装与使用相关推荐

  1. Fast CGI 工作原理

    CGI的历史 早期的webserver只处理html等静态文件,但是随着技术的发展,出现了像php等动态语言. webserver处理不了了,怎么办呢?那就交给php解释器来处理吧! 交给php解释器 ...

  2. 增加fast cgi进程数 php7,使用 FastCGI 模式运行 PHP7 教程

    [摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...

  3. 在基于Jetty Fast CGI Proxy和php-fpm下配置Discuz

    终于把Discuz装上了,但是安装完以后发现问题一大堆..这个图片不显示,那个不能用的. 问题的根源在于因为我不是直接的php访问,而是通过php-fpm中转了一下,而discuz的代码里面很多直接引 ...

  4. windos php7 fast cgi,FAST-CGI解析漏洞拿下网站并提权windows系统服务器

    作为一个懒散的人,我比较喜欢关注网上发布的漏洞.利用最新的漏洞可以比较简单的得到webshell,然后利用webshell提权拿下服务器,这个是我最喜欢的.有一个很有意思的娱乐网站,我经常登陆浏览,以 ...

  5. php fast cgi nginx,通过fast-cgi连接php-fpm和nginx之间的连接是持久的(保持活动)连接吗?...

    一年后,我问了这个问题,我似乎找到了答案. (gdb) bt #0 close () at ../sysdeps/unix/syscall-template.S:84 #1 0x0000000000a ...

  6. php fast cgi nginx,通过fast-cgi连接php-fpm和nginx之间的连接是持...

    PHP-FPM是fastCGI协议的一种实现,因此它遵守所有fastCGI规范要求. The Web server controls the lifetime of transport connect ...

  7. web-httpd2.4编译安装

    httpd-2.4特性 (1) MPM支持运行DOS机制 (2) 支持event MPM (3) 支持异步读写 (4) 支持每模块及每个目录分别使用各自的日志级别 (5)  每请求配置:<if& ...

  8. xp版php,PHP5.3以后的版本如何在XP中安装

    PHP5.3以前的版本我们可以通过ISAPI的方式安装,但是到了PHP5.3,便不再支持ISAPI的方式安装了,所以如果想要在XP下IIS中安装PHP5.3的话,我们就要借助FASTCGI.(IIS7 ...

  9. 6. Nginx + PHP + FastGCI安装

    LNAMP Linux Nginx Apache Mysql PHP Nginx + PHP(fast CGI) 可以理解为一个php加速的一个接口 Php-fpm 可以实现fastcgi协议需要的进 ...

  10. nts包如何下周 php_windows下PHP7安装方法(ts版和nts版)

    1.首先到官网下载PHP的Zip安装包 http://windows.php.net/download/ (1)VC14 x64 Non Thread Safe (2015-Dec-17 00:17: ...

最新文章

  1. Python超越Java,Rust持续称王!Stack Overflow 2019开发者报告
  2. wps 模拟分析 规划求解_入行十年,我是如何解决模流分析准确性问题的
  3. python是人工智能最大骗局-Python与人工智能的关系原来是这样的...
  4. Fletcher-Reevers Conjugate Descent和Steepest Descent两种算法中伪代码的区别
  5. centos mysql单向同步,虚拟机下实现Centos5.6下Mysql双向同步配置
  6. 计算机网络原理html,计算机网络原理与应用html..ppt
  7. 密码必须至少为6个字符_1081 检查密码 (15分)
  8. jvm虚拟机创建对象
  9. 如何算三角形的cotangent
  10. python情感分析模型_Python有趣|中文文本情感分析
  11. % 取余运算 取模运算
  12. java ssm基于springboot的设备巡检系统
  13. 概率论————思维导图(上岸必备)(数字特征)
  14. Linux学习16-磁盘分区MSDOS与GPT的区别
  15. 【机器学习】显卡、GPU、NVIDIA、CUDA、cuDNN
  16. windows Apache 的安装和配置教程
  17. 刚体6D位姿估计方法综述
  18. MySQL之——函数
  19. matlab计算连续复利,Code 2-1 单利、离散复利与连续复利的对比
  20. win7下安装ubutun双系统

热门文章

  1. MySQL面试题 | 附答案解析(十八)
  2. 机器学习四剑客3——Pandas
  3. cv2.threshold() 阈值:使用Python,OpenCV进行简单的图像分割
  4. SpringBoot 【IDEA热部署+浏览器禁用缓存】迅速提升效率
  5. autoware框架与功能简介(一)
  6. Mat矩阵基本操作与示例 OpenCV
  7. python 函数递归一次增加一次变量_python3--函数(函数,全局变量和局部变量,递归函数)...
  8. 【进大厂大数据爬虫技术核心难点】纯前端开发的爬虫程序,很多BAT技术大咖都为之惊叹
  9. HDU 4832(DP+计数问题)
  10. MyBatis中#{}和${}的区别