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


Posted in PHP onJuly 02, 2015

概述

写这篇文章的是因为今天要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

总结

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

PHP 相关文章推荐
php IP及IP段进行访问限制的代码
Dec 17 PHP
php中使用redis队列操作实例代码
Feb 07 PHP
使用PHP接受文件并获得其后缀名的方法
Aug 05 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
Aug 12 PHP
PHP的中使用非缓冲模式查询数据库的方法
Feb 05 PHP
thinkPHP实现签到功能的方法
Mar 15 PHP
ZendFramework2连接数据库操作实例
Apr 18 PHP
php显示页码分页类的封装
Jun 08 PHP
Yii框架实现对数据库的CURD操作示例
Sep 03 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
Aug 06 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
Aug 17 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Mar 09 PHP
PHP中的流(streams)浅析
Jul 02 #PHP
PHP curl使用实例
Jul 02 #PHP
PHP中使用curl入门教程
Jul 02 #PHP
Smarty最简单实现列表奇偶变色的方法
Jul 01 #PHP
PHP中的常见魔术方法功能作用及用法实例
Jul 01 #PHP
PHP获取文件夹大小函数用法实例
Jul 01 #PHP
Thinkphp模板标签if和eq的区别和比较实例分析
Jul 01 #PHP
You might like
分享一则PHP定义函数代码
2015/02/26 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2010/02/04 Javascript
8个超棒的学习 jQuery 的网站 推荐收藏
2011/04/02 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
浅谈JavaScript中Date(日期对象),Math对象
2015/02/05 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
用JS动态改变表单form里的action值属性的两种方法
2016/05/25 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
JavaScript数据类型转换的注意事项
2016/07/31 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
2016/08/01 Javascript
es6学习笔记之Async函数的使用示例
2017/05/11 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
2019/11/26 Javascript
使用Python生成XML的方法实例
2017/03/21 Python
Python利用Beautiful Soup模块修改内容方法示例
2017/03/27 Python
Django中Model的使用方法教程
2018/03/07 Python
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
python修改文件内容的3种方法详解
2019/11/15 Python
在Python中使用filter去除列表中值为假及空字符串的例子
2019/11/18 Python
Python3列表List入门知识附实例
2020/02/09 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
keras 自定义loss层+接受输入实例
2020/06/28 Python
金融专业大学生职业生涯规划范文
2014/01/16 职场文书
采购部部长岗位职责
2014/02/06 职场文书
任命书范本大全
2014/06/06 职场文书
安全目标管理责任书
2014/07/25 职场文书
在职证明范本
2015/06/15 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书