Nginx下用C/C++开发FastCGI程序

(一)关于环境搭建
1)分别安装Nginx1.08+FastCGI2.41,这个过程中可能需要安装pcre库;
2)安装C语言版本的spawn-fcgi-1.6.3;
3)安装C语言版本的fcgiwrap,这是不是必须,但它可以使应用程序像传统CGI的方式工作,即即时执行,即时释放;
(二)Nginx配置成FastCGI
location ~ \.cgi$ {

root cgi-bin;
fastcgi_pass 127.0.0.1:9000;
#fastcgi_pass unix:/var/run/nginx/nginx-fcgi.sock;
rewrite (.*).cgi /$1 break;
fastcgi_index index.cgi;
include fastcgi.conf;

}

参数说明如下:
1. 【root】:为cgi程序存放的相对目录,即相对于Nginx的安装路径,我的Nginx存入在/usr/local/nginx/sbin下,则上述配置的cgi程序则存入在/usr/local/nginx/cgi-bin下;
2. 【fastcgi_pass】:cgi程序部署的机器IP和应用监听端口,此处也可以配置成unix本地socket,这里需要特别指出的是,用spawn-fcgi包装器运行的应用程序的监听IP和端口必须与这里配置的保持一致;
3. 【rewrite】:应用程序忽略.cgi后缀名;
(三)应用程序的工作方式
  • 传统CGI方式
利用上面提到的fcgiwrap作为默认应用程序用spawn-fcgi包装器在后台运行,这样它会把请求的cgi程序像传统的cgi那样执行,即当次请求执行完后,就释放掉,就是所谓的fork-exec模式;
  • FastCGI同步方式
自已编写的cgi应用程序直接用spawn-fcgi包装器在后台运行,这样它会像一个常驻内存的cgi程序;
  • FastCGI异步方式
1. 自己实现一个解析http协议的框架,并应用程序以so的形式在框架中运行,公司的qzhttp用这一原理实现的;
2. 修订spawn-fcgi源码,使之能支持异步消息通信;
 
(四)注意事项
      若应用程序使用shmget等函数操作操作系统的共享内存,则在用spawn-fcgi作为包装器启动应用程序时,需注意启动的权限,即-u 选项指定的用户即为共享内存创建时的用户,否则访问共享内存将为失败;