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

由于最近工作的需要,本人学习了一下利用高性能web server - Nginx,来发布C/C++编写的fastCGI程序,详细细节如下。

1.介绍
    Nginx - 高性能web server,这个不用多说了,大家都知道。

FastCGI程序 - 常驻型CGI程序,它是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。

Nginx要调用FastCGI程序,需要用到FastCGI进程管理程序(因为nginx不能直接执行外部的cgi程序,我们可使用lighttpd中的spawn-fastcgi来让nginx可支持外部cgi运行。也有其他方法安装nginx-fcgi来让nginx支持cgi,这里是使用spawn-fastcgi的方法),来达到调用FastCGI程序的目的。Nginx本身没有集成类似的模块,而Apache具备该功能模块,所以不需要额外安装FastCGI进程管理程序。

2.工作原理
    Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。
    当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端。这就是Nginx+FastCGI的整个运作过程,如图1所示。

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

    ​
​图1 Nginx+FastCGI运行过程​


    FastCGI接口方式在脚本解析服务器(CGI应用程序服务器)上启动一个或者多个守护进程对动态脚本进行解析,这些进程就是FastCGI进程管理器,或者称为FastCGI引擎。 spawn-fcgi与PHP-FPM都是FastCGI进程管理器(支持PHP和C/C++​)。​
   
    介绍到这里,大家应该都对该模式有了一定的了解,下面开始进行实战!   


3.环境部署
3.1.Nginx的安装、部署与配置
    nginx下载目录
    这我们使用的是nginx-1.5.10
   
    [安装]

下载以后解压并安装(请记得看README)
    ./configure (注意了类似checking for *** ... not found项,可能是依赖包没有,则需要安装依赖包)
   

缺少pcre,则需要额外安装 (或者采用apt-get或yum的安装方式)

缺少zlib,则需要额外安装 (或者采用apt-get或yum的安装方式) 

缺少OpenSSL,则需要额外安装 (或者采用apt-get或yum的安装方式) 

如果需要配置安装额外的功能模块,可以参考这里

make
    make install (默认安装到/usr/local/nginx)


    [配置和管理]   
    1)执行选项
        -c </path/to/config> 为 Nginx 指定一个配置文件,来代替缺省的。不输入则使用默认的配置文件。
        -t 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
        -v 显示 nginx 的版本。
        -V 显示 nginx 的版本,编译器版本和配置参数。

2)检查配置文件
        sudo ./nginx -t
        nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
        nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful


    3)启动 - 默认和特殊
        /usr/local/nginx/sbin/nginx (默认启动方式)

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf (指定配置文件启动)
   
    4)查看nginx进程号(master是主进程)
        ps -ef | grep nginx

5)重新加载配置文件
        sudo kill -HUP [nginx主进程号]
        通过系统的信号控制 Nginx
        可以使用信号系统来控制主进程。默认,nginx 将其主进程的 pid 写入到 /usr/local/nginx/logs/nginx.pid 文件中。通过传递参数        给 ./configure 或使用 pid 指令,来改变该文件的位置。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/0489939aa9939214f8c716b005d10150.html