fastcgiphpfpm
1. php-FPM详解
PHPFPM是PHP FastCGI进程管理器,专为管理PHP进程池设计,用于接收web服务器请求。以下是关于PHPFPM的详细解释:
一、PHPFPM的诞生 PHPFPM的诞生源自PHPFastCGI的需求,是为了有效管理PHPFastCGI而出现的程序。
二、PHPFastCGI的作用 PHPFastCGI是一个解析PHP请求并返回结果的CGI程序,但它本身并不负责管理进程。
三、PHPCGI与PHPFastCGI的区别 在PHPFastCGI之前,存在PHPCGI,但由于其执行效率低下,最终被PHPFastCGI取代。
四、FastCGI与CGI的区别 CGI模式:每次请求时都需要读取php.ini配置,初始化执行环境,耗时且重复。 FastCGI模式:允许一次启动一个主进程,读取一次配置,然后启动多个工作进程。当请求来临时,master将请求传递给worker,避免了重复的初始化工作,提高了效率。
五、PHPFPM的工作原理 PHPFPM创建一个主进程来控制何时以及如何将HTTP请求转发给一个或多个子进程处理。 主进程还负责管理进程的创建与销毁,以适应Web应用流量的变化。
六、PHPFPM的安装与配置 安装:PHP在5.3.3之后将PHPFPM整合到核心代码中,无需单独下载安装。只需在编译PHP源码时添加enablefpm即可启用PHPFPM支持。 全局配置:在CentOS中,PHPFPM的主配置文件为/etc/php7/phpfpm.conf,配置内容通常包括进程池定义。进程池定义文件通常使用www.conf作为默认配置文件,进行必要的编辑保存后,重启PHPFPM主进程。 进程池详细配置:请参考php.net/manual/install文档。
七、实际应用 以nginx为例,可以配置nginx将请求转发给PHPFPM进行处理。
以上是PHPFPM的详细解释,涵盖了其诞生背景、作用、与CGI/PHPCGI的区别、工作原理、安装与配置以及实际应用等方面。
2. 如何通俗地解释cgi、fastcgi、php-fpm之间的关系
在解释CGI、FastCGI、PHP-FPM之间的关系时,我们需要首先了解HTTP/Web服务器,FastCGI以及PHP-FPM各自的定位和作用。
CGI(Common Gateway Interface)是一个标准,它规定了Web服务器与程序之间交互的协议,使得程序可以以标准格式接收和返回数据。CGI主要用于处理动态内容,它允许Web服务器将请求发送给外部脚本进行处理,然后将结果返回给浏览器。
FastCGI是对CGI的改进,它提供了一种更高效的方式来处理动态内容。FastCGI允许Web服务器与CGI程序建立持久连接,而不是每次请求时都创建新进程。这大大提高了性能,减少了启动和停止进程的时间开销。
当Web服务器接收到请求时,如请求/index.php,它会将请求传递给PHP解析器处理。在这个过程中,CGI协议规定了数据的传输格式。PHP解析器读取并解析请求,处理脚本,生成HTML结果,然后返回给Web服务器。Web服务器再将结果发送给浏览器。
CGI的性能瓶颈在于每次请求都需要启动一个新进程,这涉及到解析php.ini文件、初始化执行环境等步骤,每次启动和停止进程都会消耗资源。而FastCGI解决了这个问题,它通过先启动一个master进程来解析配置文件和初始化执行环境。当接收到请求时,master将请求传递给一个worker进程处理,然后立即接受下一个请求,避免了重复启动进程的开销。
PHP-FPM(FastCGI Process Manager)是一个实现FastCGI协议的程序,专门用来管理FastCGI起的进程。它负责调度PHP-cgi进程,提高性能并优化资源使用。PHP-FPM已经在PHP内核中集成,通过编译参数--enable-fpm启用。修改配置文件后,需要重启PHP-FPM以应用更改,新fork的worker将使用新的配置,而当前的worker将继续处理现有请求。
3. 关于FastCGI、php-cgi、php-fpm的区别是什么,各自有什么用途,以及相互间的关系是什么
fastcgi是一个通用网关接口,用于web服务器(iis, apache)和应用程序通信。
php-cgi是php平台的cgi程序
以上两个结合,可以使php整合在web服务中
php-fpm是一个独立的php-fcgi管理软件,它要整合进web服务中,需要使用代理模式
一般与nginx搭配。也可以与apache搭配
php-fpm一般不直接作为服务容器提供外网访问,而是通过常用web容器作代理
php作为服务器端的解析程序,运行模式分很多种,fastcgi, mod_php, proxy(代理)等。
与iis搭配时一般采用fast-cgi模式,iis自带fast-cgi引擎,配置好php参数即可
与apache搭配,在windows平台下,一般也是fast-cgi模式,在linux系统中一般是mod_php模式,把php作为一个子模块加载
也可以配置php-fpm 然后在apache中配置代理模式
与nginx搭配,一般就是用php-fpm+代理模式了