当前位置: 首页 > 编程日记 > 正文

FAST-CGI安装与使用

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 APICGI/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 技术介绍

相关文章:

利用 JQuery的load函数动态加载页面

利用JQuery的load函数动态加载页面 JQuery有好多Ajax函数&#xff0c;其中load是用来动态加载一个页面的内容到指定的dom元素上。我们来做个例子&#xff1a;做一个上下&#xff08;左右&#xff09;结构的页面&#xff0c;其中下左部分放2个以前我们做过的div按钮&#xff0c…

教你用Android做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划

作者 | Pek_KuaiJia责编 | 夕颜头图 | CSDN 下载自视觉中国出品 | CSDN&#xff08;ID:CSDNnews&#xff09;随着目前用户需求的精细化和智能化&#xff0c;很多时候我们需要在App内集成语音输入模块&#xff0c;为用户提供语音输入的功能。而科大讯飞语音作为行业内翘楚&#…

基于r-Kernel的LiteOS操作系统

LiteOS是应用于资源受限的传感网络的一种基于线程的类UNIX操作系统。也就是说它跑在存储空间和RAM有限的超低电压微控制器上&#xff0c;这也是吸引我关注它的原因&#xff08;在超低电压下系统更易出错&#xff09;。它採用r-kernel内核&#xff0c;r-kernel有三个特征&#x…

Linux网络编程中的几组类似功能的区别

1.bzero与memset char buff[1024]; memset(buff,0,sizeof(buff));bzero(buff, sizeof(buff)); struct sockaddr_in addr memset(&addr, 0, sizeof(addr)); bzero(buff, sizeof(buff)); 参考《UNIX网络编程 卷1&#xff1a;套接字联网API 第3版》1.2的解释&#xff1a…

5个案例让Python输出漂亮的表格!

来源 | Python数据之道前言最近在用python写一个小工具&#xff0c;这个工具主要就是用来管理各种资源的信息&#xff0c;比如阿里云的ECS等信息&#xff0c;因为我工作的电脑使用的是LINUX&#xff0c;所以就想着用 Python写一个命令行的管理工具&#xff0c;基本的功能就是同…

VS2010正式版MSDN下载

之前写了一篇关于微软VS2010发布会的介绍&#xff0c;现在VS2010的正式版也叫RTM版本终于在MSDN开始提高下载了&#xff0c;暂时性的还只有英文版本&#xff0c;不过等等马上应该会有中文的了。 VS2010 RTM下载地址 Microsoft Visual Studio 2010 Premium - ISOMicrosoft Visua…

windows 2012 nps配置

Windows2012 Nps配置windows 2012 nps配置1.安装windows nps角色&#xff0c;安装网络策略服务器及主机凭据授权协议。2.域中注册服务器3.配置网络策略4.按所需添加条件5.运行-mmc-添加 -证书管理单元添加个人证书—申请新证书6.选择ad注册策略即可7.选择radius身份验证—注册8…

使用man在线手册页

#man -k 函数 #man 返回的数字 函数 # man -k file | grep umask要查看linux下的函数umask 可以使用man&#xff0c;例如 # man 2 umask 如果不知道man后的节号&#xff0c;可以使用-k先查找 # man -k umask 如果使用-k返回太多内容&#xff0c;可以使用g…

Python爬取近十万条程序员招聘数据,告诉你哪类人才和技能最受热捧! | 原力计划...

作者 | Huang supreme编辑 | 郭芮出品 | CSDN博客图源 | 视觉中国随着科技的飞速发展&#xff0c;数据呈现爆发式的增长&#xff0c;任何人都摆脱不了与数据打交道&#xff0c;社会对于“数据”方面的人才需求也在不断增大。因此了解当下企业究竟需要招聘什么样的人才&#xff…

论爱的精进与痴迷

文&#xff1a;洪启嵩 汝爱我心&#xff0c;我怜汝色。以是因缘&#xff0c;经百千劫&#xff0c;常在缠缚。──《楞严经》 爱情为什么是轮回的根由&#xff0c;《楞严经》里有一段话说得很清楚&#xff1a;「汝爱我心&#xff0c;我怜汝色。 以是因缘&#xff0c;经百千劫&am…

[原] Jenkins Android 自动打包配置

一、Jenkins自动打包配置 目标&#xff1a;1. 自动打包&#xff1b;2. 自动上传&#xff1b;3. 友好下载 1. Jenkins简介 Jenkins是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作。 减少重复劳动&#xff0c;减少人工成本。 持续、自动地构建/测试软件项目…

盛大文学难逃“垄断”嫌疑,完美文学虎口夺食

观点&#xff1a;盛大文学已难逃“垄断”嫌疑&#xff1b;完美文学强攻文学阵地&#xff0c;与盛大文学发生正面冲突已成定局。盛大文学频频出手&#xff0c;在3个多月的时间里&#xff0c;先后收购榕树下、小说阅读网、言情小说吧和潇湘书院4家网站&#xff0c;加上此前拥有的…

GitHub接连封杀开源项目惹众怒,CEO亲自道歉

作者 | 唐小引图源 | 东方 IC来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;王坚博士曾经做过这样一个非常形象的比喻&#xff0c;他将做 App 比作是在别人的花园里弄盆栽&#xff0c;「种点花草是没有问题的」&#xff0c;不过「别人叫你的产品下架你就得下架&am…

Phabricator是什么,代码审查工具

Phabricator是什么&#xff1f; Phabricator支持两种代码审查工作流&#xff1a;“review”&#xff08;提交前审查&#xff09;和 “audit”&#xff08;提交后审查&#xff09;。 Phabricator是Facebook保驾护航的11大IT技术之一。在Phabricator的网站中&#xff0c;开发者给…

结构体中定义函数指针

结构体指针变量的定义&#xff0c;定义结构体变量的一般形式如下&#xff1a; 形式&#xff11;&#xff1a;先定义结构体类型&#xff0c;再定义变量 struct结构体标识符 { 成员变量列表;… }; struct 结构体标识符 *指针变量名; 变量初始化一&#xff1a;struct结构体标识符…

对卫星网络及内容的安全防护措施

对卫星网络及内容的安全防护措施 网络安全是多领域的综合业务&#xff0c;近10年来在规模和范围方面都获得了极大的发展。对网络及内容潜在的威胁来自各类不同的领域&#xff0c;因此增加了解决这一问题的难度。 在因特网产生之前&#xff0c;对卫星网络及内容实时***的安全防护…

对标Pytorch,清华团队推出自研AI框架“计图”

「AI技术生态论」 人物访谈栏目是CSDN发起的百万人学AI倡议下的重要组成部分。通过对AI生态专家、创业者、行业KOL的访谈&#xff0c;反映其对于行业的思考、未来趋势的判断、技术的实践&#xff0c;以及成长的经历。2020年&#xff0c;CSDN将对1000人物进行系列访谈&#xff0…

echo使用说明,参数详解

简介    echo [OPTION]... [STRING]... 描述    -n 末尾不加换行   -e 开启输出字串中对反斜杠的转译   -E 禁用反斜杠转译   只有开启-e参数的时候&#xff0c;下面的命令才能起作用:   \0NNN 输出NNN(一个八进制数)在ASCII码表中对应的字符&#xff0c;     …

ATSS : 目标检测的自适应正负anchor选择,很扎实的trick | CVPR 2020

作者 | VincentLee来源 | 晓飞的算法工程笔记论文地址&#xff1a;https://arxiv.org/abs/1912.02424代码地址&#xff1a;https://github.com/sfzhang15/ATSS在仔细比对了anchor-based和anchor-free目标检测方法后&#xff0c;结合实验结果&#xff0c;论文认为两者的性能差异…

GCC编译选项--创建与使用库

系统函数库使用 linux系统函数库位于/usr/lib和/lib目录下 #include <math.h> #cc test.c -lm -o test 动态库创建 1).编译时指定-fPIC 通知gcc产生可以重定位的与位置无关的目标代码 2).链接时指定-shared 使gcc编译器生成动态链接库 动态库使用 通过设置环境…

不错的×××实验

(virtual private network 虚拟专网)&#xff0c;利用公用网络&#xff0c;按照相同的策略和规则&#xff0c;建立内部私有连接。 广泛的讲&#xff0c;***体系结构分为&#xff1a;站点到站点的***和远程访问*** 站点到站点的***&#xff1a;在这种情况下&#xff0c;同一个机…

达观数据于敬:个性化推荐系统实践

达观数据于敬&#xff1a;个性化推荐系统实践 在DT(data technology)时代&#xff0c;网上购物、观看视频、聆听音乐、阅读新闻等各个领域无不充斥着各种推荐&#xff0c;个性化推荐已经完全融入人们的日常生活当中。个性化推荐根据用户的历史行为数据进行深层兴趣点挖掘&#…

C语言Free时报错HEAP CORRUPTION DETECTED

char *k1; k1 (char *) malloc(4*sizeof(char)); v1 (char *) malloc(4*sizeof(char)); strcpy(k1,"abcd"); free(k1); 在linux下不会报错&#xff0c;但是在VC环境会报错&#xff1a;HEAP CORRUPTION DETECTED 出现这个错误的原因一般都是操作new申请的内存溢…

DivCSS网页布局中CSS无效的十个常见原因

在学习DivCSS网页布局的知识&#xff0c;可是W3C validation有时难以操作&#xff0c;但用它你可以查看由版面设计引起的差错。验证程序抛出大量差错和警告&#xff0c;说明你的XHTML尚未完善&#xff0c;可能无法在不同浏览器上保持一致功能。下面十个细微的失效问题难住了大批…

如何创建计算机视觉场景训练数据

作者 | 刘明宽 数据科学部门负责人&#xff0c;澳鹏&#xff08;Appen&#xff09;美国 曾任eBay首席研究科学家&#xff08;数据科学总监&#xff09;对于一些精度要求不太高&#xff0c;或者不太复杂的计算机视觉应用场景&#xff0c;利用一些现有的开源数据集如ImageNet/Coc…

express中的bin/www文件详解

2019独角兽企业重金招聘Python工程师标准>>> #!/usr/bin/env node 表明是node执行文件,在做repl工具时候的会用的 "#!"是标识符/usr/bin是环境变量的绝对路径/env 如果是直接#!/usr/bin node ,则执行这个文件的时候,会从/usr/bin中找node命令,如果没有,则…

深度分析typedef--定义自己的数据类型

最近在看redis源码的时候看到Ae.h的时候看到如下源码: /* Types and data structures */ typedef void aeFileProc(struct aeEventLoop *eventLoop, int fd, void *clientData, int mask); typedef int aeTimeProc(struct aeEventLoop *eventLoop, long long id, void *client…

Go对Python产生的冲击

作者 | yuliao来源 | 懒编程&#xff08;ID: hackpython&#xff09;Go 的流行让以 Python 为主流语言的开发者&#xff08;比如我&#xff09;产生了一定的危机感。上一次有这种危机感还是做 Android 开发的时候&#xff0c;当时用 Java 做 Android 开发&#xff0c;Google 强…

更新ADT到Android L的方法

android ADT无法更新到20&#xff1f; 哈哈&#xff0c;有办法&#xff0c;windows 进入host 写入例如以下所有&#xff0c;是的所有。然后在到sdk manager中方可更新 #Google Services START #Googleapis↓ 61.19.1.54 mt0.googleapis.com 61.19.1.54 mt1.googleapis.com 61…

php.ini安全配置详细解释

PHP本身再老版本有一些问题&#xff0c;比如在 php4.3.10和php5.0.3以前有一些比较严重的bug&#xff0c;所以推荐使用新版。另外&#xff0c;目前闹的轰轰烈烈的SQL   Injection也是在PHP上有很多利用方式&#xff0c;所以要保证  安全&#xff0c;PHP代码编写是一方面&am…