Chinaunix首页 | 论坛 | 博客
  • 博客访问: 371214
  • 博文数量: 114
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1219
  • 用 户 组: 普通用户
  • 注册时间: 2015-02-07 21:23
文章分类

全部博文(114)

文章存档

2018年(1)

2017年(5)

2016年(87)

2015年(21)

我的朋友

分类: 系统运维

2016-05-02 15:44:57


  1. 1.1
  2. 什么是CGI
  3.   CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进
  4. 行“交谈”的一种工具,其程序须运行在网络服务器上。
  5.   CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等
  6. 总结:CGI使外部程序与Web服务器之间交互成为可能。CGI程式运行在独立的进程中,
  7. 并对每个Web请求建立一个进程,这种方法非常容易实现,但效率很差,难以扩展。面对大量请求,
  8. 进程的大量建立和消亡使操作系统性能大大下降。此外,由于地址空间无法共享,也限制了资源重用。
  9. 1.2 什么是 FastCGI

  10. FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。
  11. 多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等。
  12. 同时,FastCGI也被许多脚本语言支持,其中就有PHP。
  13. FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,
  14. 因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后将结果返回给HTTP服务器。
  15. 这在处理高并发访问时几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少使用了。
  16. FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,
  17. 同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,
  18. 可以将其直接交付给FastCGI进程来执行,
  19. 然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果
  20. 返回给客户端,这在很大程度上提高了整个应用系统的性能。

  21. 总结:
  22. 1.FastCGI是HTTP server和动态脚本语言间通信的接口。
  23. 2.FastCGI优点是把动态语言和HTTP server分离开来。
  24. 3.Nginx和lighttp web程序,多数动态语言都支持FastCGI
  25. 4.FastCGI接口方式采用C/S结构,客户端和服务器。
  26. 5.PHP动态语言服务端可以启动多个FastCGI的守护进程(php-fpm)


  27. 1.3 Nginx+FastCGI运行原理

  28. Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用
  29. FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。为了调用CGI程序,
  30. 还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),
  31. 这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,
  32. 通过FastCGI接口,wrapper接收到请求,然后派生出一个新的线程,
  33. 这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,
  34. 沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端
  35. 这就是Nginx+FastCGI的整个运作过程

阅读(1105) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~