什么是FastCGI?

来源:互联网 发布:网络拍卖经营许可证 编辑:程序博客网 时间:2024/06/14 01:13

CGI即通用网关接口(Common Gateway Interface),它是一段程序,运行在服务器上,提供与客户端HTML页面的交互。

通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML页面提交的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页面

一、传统CGI

  • 在CGI模式下每次请求PHP都要重新解析php.ini,重新加载全部扩展和初始化数据结构。
  • 每次HTTP服务器遇到动态脚本时,都要重启动脚本解析器来解析。fork-and-execute模式。
  • 安全性差。
  • 高并发时,效率低。

二、FastCGI

  • 可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口
  • 多数流行的HTTP server都支持,如:ApacheNginxlighttpd等。
  • 很多脚本语言支持,如:PHP。
  • FastCGI是从CGI发展改进而来的。
  • 采用C/S结构,HTTP服务器脚本解析服务器分离,多个脚本解析守护进程。
  • 扩展加载和数据结构初始化,在进程启动时只发生一次。

FastCGI原理图:

Internet 请求静态资源,Nginx 则直接返回静态资源。

请求动态脚本,Nginx 则将动态脚本转至 FastCGI 进程处理,完成后,返回处理结果给 Nginx,然后返回给Internet的客户端。

当 Nginx 将 CGI 请求发送给socket 的时候,通过 FastCGI 接口,wrapper接收到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;

接着,wrapper 再将返回的数据通过 FastCGI 接口,沿着固定的 socket 传递给 Nginx;最后,Nginx 将返回的数据发送给客户端。

参考资料:

http://www.fastcgi.com