FastCGI介绍 – 作者:hu666666

一、为什么要提出CGI?

我们要记住一点,在早期出现网站的时候,大多数的访问都以静态网页为主,由于这个大的环境背景,就造成了web服务器主要用于返回静态网页。但随着后期用户需求的增加以及技术的提升,就出现了动态网页。这时候,就出现了一个矛盾,web服务器只能用于返回静态页面,但用户又需要网站响应动态请求。在这种情况下,就催生了CGI协议。

二、什么是CGI?

CGI是一种通信协议,类似于http协议,用来规范web服务器与各种语言解释器之间的通信(数据交换)。在这种情况下,网站响应用户请求的过程如下:

1.web服务器接收http请求后,判断该请求是动态的还是静态的。

2.若为静态内容,web服务器直接返回相应内容,通信结束。若为动态内容继续进行以下步骤。

3.web服务器会将用户通过http请求传来的数据(包括:URL,查询字符串,HTTP header,POST数据等),转换成CGI数据格式。

4.将CGI格式的数据传送到对应的语言解释器,解释器处理该请求,将结果再以CGI数据格式,返回给web服务器。

5.web服务器再将处理结果返回给用户。

补充知识:

1.常见的webserver:Apache,Nginx,IIS,Tomcat等

2.常见的web应用:PHP,Java,Asp.net等应用程序

3.Apache既可以采用上述方式来响应动态请求,也可以在Apache上加载php解释模块,将其当作Apache的一个子模块,这样就可以在web服务器上解释php请求了。

三、既然已经有了CGI,那为什么还要提出FastCGI?

这里,我们就不得不说说CGI的坏话啦,嘿嘿嘿…….

虽然,CGI完成了它的使命–可以响应动态请求,并且使webserver与web应用之间尽量隔离。但它还有一个巨大的缺点,就是每次有一个CGI请求,它就会开启一个CGI进程,并在处理完请求后就销毁该进程,造成资源浪费。这样的运行机制,就导致其无法支持大并发请求。

那就迎来了我们今天的主角儿–FastCGI登场。

可以简单的说,FastCGI就是CGI协议的升级版本,只是在处理FastCGI请求有所不同而已。php-fpm是FastCGI协议的具体实现,官方对它的解释是FPM(FastCGI进程管理器)用于代替PHP FastCGI的大部分功能,对于高负载的网站十分有用。

php-fpm进程包了master和worker进程,其中master进程主要与Web服务器进行通行,接收请求,再将请求转发给worker进程进行处理,worker进程主要负责动态执行PHP代码,并将最终处理结果返回给Web服务器。

注意:我们在搭建网站时,可以将web服务器和php-fpm部署在通、同一台服务器上,也可以部署在两台服务器上。一般情况下,都是部署在两台服务器上,因为这样才可以做到更高效的响应用户的请求。

来源:freebuf.com 2021-03-21 10:04:41 by: hu666666

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论