欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mod_php、FastCGI、PHP-FPM等PHP运行方式对比

程序员文章站 2022-10-21 15:47:14
概述 写这篇文章的是因为今天要ubuntu下搭建lnmp环境,nginx使用的是php-fpm,所以对web服务器与php解释器的交互方式做了个整理。 众所周知,php...

概述

写这篇文章的是因为今天要ubuntu下搭建lnmp环境,nginx使用的是php-fpm,所以对web服务器与php解释器的交互方式做了个整理。

众所周知,php是跨平台、跨服务器的语言,这也是它如此流行的原因之一。但是,很少有人知道php解释器可以以不同的方式运行在web服务器中。php最常用的方式是以模块的方式(mod_php)运行在apache中,也是apache运行php的默认方式。但是在nginx中,nginx又使用的是php-fpm。

这篇文章就对这些概念做个介绍,如有不对的地方,请多多批评指教。

什么是php处理器(php handlers)?

首先需要记住的是,任何一种web服务器(apache、nginx等)都是被设计成向用户发送html、图片等静态资源的,web服务器自身并不能解释任何动态脚本(php、python等)。php处理器就是用来解释web应用中的php代码,并将它解释为html或其他静态资源,然后将解析的结果传给web服务器,最后再由web服务器发送给用户。大多数的web服务器都不能解析php代码,因此它需要一个能解析php代码的程序,这就是php处理器。

mod_php

首先,来看一下以apache模块方式运行php。mod_php现在在linux各版本的软件仓库里都有,因此很容易被安装。

当php以模块的方式运行在apache中时,php解释器被“内嵌”在apache的进程里。apache不会调用任何外部的php进程,因此这种方式使apache与php能更好的通信。但是,当以这种方式运行php的时候,哪怕apache提供的仅仅是静态的资源(如html),apache的每个子进程也都会载入 mod_php,导致了比正常情况下更多的内存开销。

以这种方式运行的另一个缺点是,它仅能与apache一起配合工作。另外,在小型的vps和大型的网站中,这种方式也不合适,因为大型网站可能有很多静态资源,而这些静态资源是不需要php程序解释的。

优点:
1.易于安装和更新
2.容配置
缺点:
1.仅能与apache一起工作
2.增加了apache子进程内存开销
3.当更改php.ini文件后,需要重启apache

fastcgi

fastcgi是交互程序与web服务器通用的协议接口,是早期cgi(common gateway interface)的一个变种。相对于cgi来说,fastcgi减少了和web服务器交互的开销,同时一次可以处理更多的请求。

apache可以以mod_fcgid的形式使用fastcgi。其他web服务器,如lighttpd, nginx, cherokee,甚至微软的iis也都能使用fastcgi。使用fastcgi,可以同时设置多个版本的php,这在某些情况下非常有用。

fastcgi还利用suexec来支持不同的用户用自己的php的实例。这个特性对于在共享环境下提高安全性尤其重要。fastcgi在保证性能的同时,也减少了web服务器的内存开销。

优点:
1.兼容多数web服务器
2.比mod_php占内存小
3.更多的配置项,包括多版本php和suexec
缺点
1.配置复杂
2.不被大家所熟知

php-fpm(fastcgi process manager)

php-fpm是web服务器使用php的一种最新方式,也是php fastcgi的另外一种实现。php-fpm对于运行在小型vps和多服务器上的web应用非常应用。同时,它也可以被兼容fastcgi的任何web服务器所使用。

php-fpm使管理员能够优雅地停止和启动php工作进程而不丢失任何查询。这允许我们逐步更新配置和二进制,而不会损失任何查询。它还允许我们在发生任何意外破坏的情况下,紧急重启进程。

优点:
1.兼容多数web服务器
2.比mod_php占内存小
3.更多的配置项,包括多版本php和suexec
缺点
1.配置复杂
2.不被大家所熟知

补充:apache运行php的四种方式

mod_php (dso,dynamic shared object)
cgi
suphp
fastcgi

总结

内容相对抽象,理解的不深,记录下留作以后参考~:)