Nginx + fastcgi 简单实例

参考https://blog.csdn.net/allenlinrui/article/details/19419721

一、介绍

通用网关接口(Common Gateway Interface/CGI)描述了客户端和服务器程序之间传输数据的一种标准,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI 独立于任何语言的,CGI 程序可以用任何脚本语言或者是完全独立编程语言实现,只要这个语言可以在这个系统上运行。Unix shell script, Python, Ruby, PHP, perl, Tcl, C/C++, 和 Visual Basic 都可以用来编写 CGI 程序。

 

 

 

 

 

快速通用网关接口(Fast Common Gateway Interface/FastCGI)是通用网关接口(CGI)的改进,描述了客户端和服务器程序之间传输数据的一种标准。FastCGI致力于减少Web服务器与CGI程式之间互动的开销,从而使服务器可以同时处理更多的Web请求。与为每个请求创建一个新的进程不同,FastCGI使用持续的进程来处理一连串的请求。这些进程由FastCGI进程管理器管理,而不是web服务器。

 

 

 

 

 

 

 

 

 

 

由于 FastCGI 程序并不需要不断的产生新进程,可以大大降低服务器的压力并且产生较高的应用效率。它的速度效率最少要比CGI 技术提高 5 倍以上。它还支持分布式的部署, 即 FastCGI 程序可以在web 服务器以外的主机上执行。

 

总结:CGI 就是所谓的短生存期应用程序,FastCGI 就是所谓的长生存期应用程序。FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。

 

 

二、配置(待补充)

三、简单的hello实例

安装完成后,可以在任意文件夹中编写一个简单的cpp程序,比如cgi.cpp

Nginx + fastcgi 简单实例_第1张图片

 

 

 

 

编译g++ cgi.cpp -o cgidemo -lfcgi

 

将CGI可执行程序移动到nginx目录下cp cgidemo /usr/local/nginx/fastcgi_temp/cgidemo(没有fastcgi_temp文件夹的话自己创建)

 

启动spawn-fcgi管理进程,并绑定server IP和端口(不要跟nginx的监听端口重合)

/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 12345 -f /usr/local/nginx/fastcgi_temp/cgidemo

成功会显示

 

 

注:如果出现spawn-fcgi: child exited with: 0,是缺少while循环。

fastcgi代码要有应答循环过程,典型格式如下:

while (FCGI_Accept() >= 0) {//循环条件

  # 应答循环体

}

 

知道一个客户端请求来的时候FCGI_Accept块才执行,并返回0。如果有一个系统故障,或是系统管理员终止进程,Accept将返回-1。

如果应用程序作为一个CGI程序被调用,那么第一次调用Accept时,返回0,第二次总是返回-1,产生CGI行为。

 

 

更改/usr/lcoal/nginx/conf/nginx.conf配置文件,加入

 

 

重新加载nginx配置文件

/usr/local/nginx/sbin/nginx -s reload

 

访问http://100.100.181.80/cgidemo.cgi

Nginx + fastcgi 简单实例_第2张图片

 

 

 

你可能感兴趣的:(Nginx + fastcgi 简单实例)