nginx php fastcgi安装

CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。 CGI能够用任何一种语言编写,只要这种语言具备标准输入、输出和环境变量。如php,perl,tcl等。php

FastCGI像是一个常驻 (long-live)型的CGI,它能够一直执行着,只要激活后,不 会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序能够在网站服务器之外的 主机上执行而且接受来自其它网站服务器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI 解释器进程保持在 内存中并所以得到较高的性能。众所周知,CGI 解释器的反复加载是CGI性能低下的主要缘由,若是CGI解释器保持在 内存中并接受FastCGI 进程管理器调度,则能够提供良好的性能、伸缩性、Fail- Over特性等等。
Nginx+FastCGI运行原理
Ngi nx不支持对外部程序的直接调用或者解析,全部的外部程序(包括PHP)必须经过FastCGI接口来调用。FastCGI接口在Linux下是socket,(这个socket能够是文件socket,也能够是ip socket)。为了调用CGI程序,还须要一个FastCGI的wrapper(wrapper能够理解为用于启动另外一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,经过FastCGI接口,wrapper接纳到请求,而后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据经过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运做过程。详细的过程,如图1所示。

 

spawn-fcgi与PHP-FPM前端

前面介绍过,FastCGI接口方式在脚本解析服务器上启动一个或者多个守护进程对动态脚本进行解析,这些进程就是FastCGI进程管理器,或者称之为FastCGI引擎, spawn-fcgi与PHP-FPM就是支持PHP的两个FastCGI进程管理器。
下面简单介绍spawn-fcgi与PHP-FPM的异同。
 服务器

spawn-fcgi是HTTP服务器lighttpd的一部分,目前已经独立成为一个项目,通常与lighttpd配合使用来支持PHP,可是ligttpd的spwan-fcgi在高并发访问的时候,会出现内存泄漏甚至自动重启FastCGI的问题。
 网络

Nginx是个轻量级的HTTP server,必须借助第三方的FastCGI处理器才能够对PHP进行解析,所以Nginx+spawn-fcgi的组合也能够实现对PHP的解析,这里不过多讲述。
 架构

PHP-FPM也是一个第三方的FastCGI进程管理器,它是做为PHP的一个补丁来开发的,在安装的时候也须要和PHP源码一块儿编译,也就是说PHP-FPM被编译到PHP内核中,所以在处理性能方面更加优秀;同时它在处理高并发方面也比spawn-fcgi引擎好不少,所以,推荐Nginx+PHP/PHP-FPM这个组合对PHP进行解析。
 并发

FastCGI 的主要优势是把动态语言和HTTP Server分离开来,因此Nginx与PHP/PHP-FPM常常被部署在不一样的服务器上,以分担前端Nginx服务器的压力,使Nginx专注处理静态请求和转发动态请求,而PHP/PHP-FPM服务器专注解析PHP动态请求。app

从php5.3.3之后php-fpm就已是php的一部分了socket

http://book.51cto.com/art/201202/314842.htm分布式

相关文章
相关标签/搜索