一、什么是CGI
认识CGI
公共网关接口,Common Gateway Interface, 简称CGI,通俗来说就是跑在服务器上的一段程序。
cgi的处理步骤
1、通过Internet把用户请求送到Web服务器
2、Web服务器接收到用户请求并交给CGI程序
3、CGI程序把处理结果传送给Web服务器
4、Web服务器把结果送回到用户
以用户登录举例
CGI程序是如何工作的:
1、web服务器(Nginx) , 收到一个请求
2、web服务器fork一个子进程,每处理一请求, 都会创建一个子进程
3、数据处理完成之后, 该cgi进程会被web服务器杀死
为什么要使用CGI
因为Nginx只能处理静态页面请求,动态请求比如说登录得交给别人处理。
二、fastCGI
为什么要使用fastCGI
因为普通的cgi有个弊端,就是处理每个请求都需要创建一个进程,并且处理完毕之后会马上销毁,这种频繁创建销毁进程的行为,效率太低,所以改用fastCGI,fastCGI处理请求,比如说上传图片,只创建一个进程,服务完一个请求之后就会阻塞,不会销毁,等待下一个请求,阻塞等待占用的资源还是比较少的。
使用fastCGI之前
使用fastCGI之前,得安装spawn-fcgi。Nginx通过spawn与fastCGI通信。
fastCGI工作流程
1、Nginx把请求发给spawn-fcgi,端口号是Nginx配置文件自己指定的。
2,、spawn-fcgi收到请求后,把数据转发给自己创建的子进程fastCGI进程,这个进程的程序是自己编写的,根据不同的业务编写不同的程序。
3、fastCGI进程处理完毕以后,再把回应请求发回spawn-fcgi,spawn-fcgi再转发给Nginx。
Nginx的fastCGI配置
这是在Nginx.conf文件里配置的。
location /login{
fastcgi_pass 127.0.0.1:10000;#fastCGI的IP和端口号
include fastcgi.conf;#安装了fastCGI之后就会自带一个这个文件,一般不需要管,里面都是一些环境变量之类的
}
spawn-fcgi的启动
启动命令
#spawn-fcgi -a IP -p 端口 -f fastcgi程序,比如下面这个
spawn-fcgi -a 127.0.0.1 -p 10000 -f ./bin_cgi/login#这里的IP和端口号得与Nginx配置文件一致,比如我上面的配置文件
#最后那个程序是我们自己编写的CGI程序
spawn-fcgi的退出
只能用kill命令杀死