后端程序与fastcgi在nginx上配置

参考:https://www.zhihu.com/question/30672017
参考:http://blog.51reboot.com/cgi-fastcgi-wsgi/
参考:https://www.cnblogs.com/xiaouisme/archive/2012/08/01/2618398.html

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

0. 前言

通常我们在windows上把网站布置在IIS上;在Linux上的话,使用nginx布置网站。对于网页的后端程序,我们比较容易想到的是:
对于静态内容,请求内容,返回内容即可,这通常由网站服务器直接处理响应。
对于动态内容:请求来了,后端程序基于用户的信息识别及用户的请求内容,给出设计好的响应。

问题来了,后端程序如何接受数据,如何响应数据?
IIS/Nginx作为了网站端口的监听方,浏览器访问相关的数据都是传给它,并与它交互。而后端程序如果想接受/响应数据请求,就要和网站服务进行交互。我们定义的后端响应程序需要注册到网站服务器,交互方式:
用户浏览器 <-> 网站服务器IIS/Nginx <-> 后端程序

当然了,后端程序通常还会要访问数据库等资源:
后端程序<->数据库等资源

网站服务器IIS/Nginx <-> 后端程序之间的接口格式,数据传递方法,配合关系是我们关注的重点,也就是下面的介绍。

1. CGI/FastCGI/WCGI介绍

这三种是常用的几种后端程序的接口形式:

CGI: Common Gateway Interface
每个请求来了,启动一个进程去服务这个请求;收到一个请求,输出一个响应。

FastCGI:Fast Common Gateway Interface
使用进程/线程池来处理一连串的请求,这些进程/线程由FastCGI服务器管理,而不是Web服务器。
1. 性能:通过进程/线程池规避了CGI开辟新的进程的开销。
2. 兼容:非常容易改造现有CGI标准的程序。
3. 语言无关:FastCGI是一套标准,理论上讲只要能进行标准输出(stdout)的语言都可以作为FastCGI标准的Web后端。

WSGI:Web Server Gateway Interface
Web服务器网关接口是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。
当Web Server收到一个请求后,可以通过Socket把环境变量和一个Callback回调函数传给后端Web应用,Web应用在完成页面组装后通过Callback把内容返回给Web Server。
优点:
1. 异步化,通过Callback将Web请求的工作拆解开,可以很方便的在一个线程空间里同时处理多个Web请求。
2. 方便进行各种负载均衡和请求转发,不会造成后端Web应用阻塞。

Nginx上部署Fastcgi程序

  1. 下载spawn-fcgi,make, 用于包装fastcgi的app调用

  2. 下载fcgi2,make并且install,用于编写fastcgi-app的接口库

  3. 编写一个简单的fastcgi-app,例如
    #include
    #include <fcgi_stdio.h>
    #include <stdlib.h>
    using namespace std;
    int main()
    {
    int count = 0;
    while(FCGI_Accept() >= 0)
    {
    printf( “HTTP/1.1 200 OK;\r\n” );
    printf( “Content-type: application/json;charset=UTF-8\r\n\r\n” );
    printf( “{“data”: “123”}” );
    }
    return 0;
    }

  4. 编译运行该程序
    make:
    g++ helloFastCgi.c -o hello -L/usr/local/lib -lfcgi -Wl,-R /usr/local/lib
    run:
    ./spawn-fcgi -a xxx.xxx.xxx.xxx -p 10001 -f /home/render/build/nginx/sbin/hello -F

  5. 在nginx网站的配置中添加,对应某个请求的响应:
    location = /auth.cgi {
    fastcgi_pass xxx.xxx.xxx.xxx:10001;
    fastcgi_index index.cgi;
    include fastcgi.conf;
    }
    然后置配置文件生效:
    nginx -s reload

  6. 浏览器上请求该auth.cgi网页,就会看到fastcgi后端程序的返回内容

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章