参考:

nginx+c/c++ fastcgi:http://www.yis.me/web/2011/11/01/66.htm

cgi探索之路:http://github.tiankonguse.com/blog/2015/01/19/cgi-nginx-three/

  有些性能要求很高的后端CGI都是用C写的,以lighthttp为server 。虽然php结合php-fpm的fastcgi模式也有不错的性能,但某些情况下C的性能还是php无法比拟的。

  先有必要有这样第一个认识:ngxin作为一个webserver,本身并不包含CGI的解释器,需要通过一个中间件【例如php-fpm】来运行CGI。他们之间的模式大致是:
  nginx <-- socket --> php-fpm-------->php

  那么nginx既然要运行c写的CGI那么也应该有类似php-fpm的东西。这个就是spawn-fcgi。原本是lighttp 内的fastcgi进程管理器。

下面是具体步骤:

1.安装Spawn-fcgi 【提供调度cig application】

wget   http://download.lighttpd.net/spawn-fcgi/releases-1.6.x/spawn-fcgi-1.6.4.tar.gz
tar zxvf spawn-fcgi-1.6..tar.gz
cd spawn-fcgi-1.6.
./configure --prefix=/usr/local/spawn-fcgi
make & make install

2、安装fastcgi库 【提供编写cgi时的类库】

wget  http://www.fastcgi.com/dist/fcgi.tar.gz
tar zxvf fcgi.tar.gz
cd fcgi
./configure --prefix=/usr/local/fastcgikit/make & make install

注意:

cp /usr/local/fastcgikit/lib/libfcgi.so.0 /usr/lib64

一定要这样复制过来,否则会报错找不到文件:

3.nginx安装配置【提供web访问】

location ~ \.cgi$ {
#proxy_pass http://127.0.0.1;
root /cgi;
fastcgi_pass 127.0.0.1:;//让其监听9001端口,与spawn-cgi监听端口一致
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME /cgi$fastcgi_script_name;
include fastcgi_params;
}

4.测试代码fcgi_hello.c:(c代码)

#include "fcgi_stdio.h" //要写在行首(fcgi_stdio.h里定义的printf与c里的冲突),且用冒号(引用路径而非全局)
#include <stdio.h>
#include <stdlib.h> int main(void)
{
int count = 0;
while(FCGI_Accept() >= 0) {
printf("Content-type: text/html\r\n");
printf("\r\n");
printf("Hello world!<br>\r\n");
printf("Request number %d.", count++);
}
return 0;
}

编译测试代码:(必须要有-lfcgi参数)

g++ fcgi_hello.c -o fcgi_hello -L /usr/local/fastcgikit/lib/ -lfcgi

注意:

(1).该代码要放在/usr/local/fastcgikit/include这个目录下编译,因为要包含头文件fcgi_stdio.h进来;

5.启动spawn-cgi

/usr/local/spawn-fcgi/bin/spawn-fcgi -a 127.0.0.1 -p  -F   -f /usr/local/fastcgikit/include/fcgi_hello -u json

查看效果:ps -ef|grep fcgi_hello

问题:

Nginx + FastCgi + Spawn-fcgi + c 的架构的更多相关文章

  1. Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布

       FastCGI编程包括四部分:初始化编码.接收请求循环.响应内容.响应结束循环. FCGX_Request request; FCGX_Init(); ); FCGX_InitRequest(& ...

  2. 【入门篇】Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布

    http://blog.csdn.net/allenlinrui/article/details/19419721 1.介绍     Nginx - 高性能web server,这个不用多说了,大家都 ...

  3. [转] nginx+FastCGI+c++

    from: http://www.cnblogs.com/xiaouisme/archive/2012/08/01/2618398.html 一 安装 目的:不需支持php等.就html就行了.步骤: ...

  4. nginx fastcgi配置

    1.1 nginx概述nginx简介Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/P ...

  5. Nginx + FastCGI 程序(C/C++)搭建高性能web service的demo

    http://blog.csdn.net/chdhust/article/details/42645313 Nginx + FastCGI 程序(C/C++)搭建高性能web service的Demo ...

  6. nginx+fastcgi+c/cpp

    参考:http://github.tiankonguse.com/blog/2015/01/19/cgi-nginx-three/ 跟着做了一遍,然后根据记忆写的,不清楚有没错漏步骤,希望多多评论多多 ...

  7. nginx fastcgi php-fpm的关系梳理

    CGI(Common Gateway Interface)CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具 ...

  8. nginx 3.nginx+fastcgi

    死磕nginx 3.nginx+fastcgi 互联网服务器有个非常典型的架构lamp(linux+apache+mysql+php),由于其开源和强大的兼容性而风靡一时,不过随着nginx的横空出世 ...

  9. Nginx+FastCGI运行原理

    Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用.FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可 ...

  10. 记录一次自己对nginx+fastcgi(fpm)+mysql压力测试结果

    nginx + fastcgi(fpm) 压力测试: CentOS release 5.9 16核12G内存 静态页面: 并发1000,压测200秒,测试结果: 系统最大负载5.47 成功响应: 25 ...

随机推荐

  1. memalign vs malloc - 使用O_DIRECT参数open一个文件并读写

    听说使用odirect参数打开文件时能够以扇区的单位进行读写. 于是open了一个块设备文件/dev/sdo,当然还要带上读写参数O_RDWR 然后进行读写时出错了. 找了一会发现问题根本在于读写的b ...

  2. ios调用第三方程序打开文件,以及第三方调用自己的APP打开文件

    1.自己的APP调用第三方打开文件 主要是使用  UIDocumentInteractionController  类   并实现 UIDocumentInteractionControllerDel ...

  3. Java类路径

    Java 类路径告诉 java 解释器和 javac 编译器去哪里找它们要执行或导入的类. 类(您可能注意到的那些 *.class 文件)可以存储在目录或 jar 文件中,或者存储在两者的组合中, 但 ...

  4. 什么是领域驱动设计(Domain Driven Design)?

    本文是从 What is Domain Driven Design? 这篇文章翻译而来. ”…在很多领域,专家的作用体现在他们的专业知识上而不是智力上.“ -- Don Reinertsen 领域驱动 ...

  5. canvas放射性渐变填充

    今天在学习canvas时,遇到canvas的fillstyle有一个createRadialGradient()方法,创建放射性渐变. 上代码: <!DOCTYPE html> <h ...

  6. sql语句对数据库表进行加锁和解锁

    锁是数据库中的一个非常重要的概念,它主要用于多用户环境下保证数据库完整性和一致性. 我们知道,多个用户能够同时操纵同一个数据库中的数据,会发生数据不一致现象.即如果没有锁定且多个用户同时访问一个数据库 ...

  7. 不制作证书是否能加密SQLSERVER与客户端之间传输的数据?

    不制作证书是否能加密SQLSERVER与客户端之间传输的数据? 在做实验之前请先下载network monitor抓包工具 微软官网下载:http://www.microsoft.com/en-us/ ...

  8. [openwrt 项目开发笔记]: 传送门

    “Openwrt 项目开发笔记”系列传送门: [Openwrt 项目开发笔记]:Openwrt平台搭建(一) (2014-07-11 00:11) [Openwrt 项目开发笔记]:Openwrt平台 ...

  9. Asp.Net Web API 2第七课——Web API异常处理

    前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文主要来讲解Asp.Ne ...

  10. Neo4j:Data Model Transformation:From Relation To Graph

    Here are some tips that help you with the transformation: Each entity table is represented by a labe ...