目前各种服务器HTTP Server对PHP的支持一共有三种:

  • 通过HTTP Server内置的模块来实现,例如Apache的mod_php5,类似的Apache内置的mod_perl可以对perl支持;
  • 通过CGI来实现,这个就好比之前perl的CGI,该种方式的缺点是性能差,因为每次服务器遇到这些脚本都需要重新启动脚本解析器来执行脚本然后将结果返回给服务器,另一方面就是不太安全,该方面几乎很少使用了。
  • 最新出现一种叫做FastCGI。所谓FastCGI就是对CGI的改进。它一般采用C/S结构,一般脚本处理器会启动一个或者多个daemon进程,每次HTTP Server遇到脚本的时候,直接交付给FastCGI的进程来执行,然后将得到的结果(通常为html)返回给浏览器。

FastCGI这种方法的问题存在一个小问题是当遇到大流量的频繁请求的话,脚本处理器的daemon进程可能会超负荷从而变得很慢,甚至发生内存泄漏。但是比较起Apache的内置模块的方式的优点是由于Server和脚本解析器完全分开各负其责,因此服务器不再臃肿,可以专心地进行静态文件响应或者将动态脚本解析器的结果返回给用户客户端。所以比较起Apache的内置模块方式,有时候性能要提高很多。有人测试可能会达到Apache+mod_php的5~10倍。

使用FastCGI方式现在常见的有两种stack:

  • ligthttpd+spawn-fcgi
  • nginx+PHP-FPM(也可以用spawn-fcgi)

如上面所说该两种结构都采用FastCGI对PHP支持,因此HTTP Server完全解放出来,可以更好地进行响应和并发处理。因此lighttpd和nginx都有small, but powerful和efficient的美誉。

该两者还可以分出一个好坏来,spawn-fcgi由于是lighttpd的一部分,因此安装了lighttpd一般就会使用spawn-fcgi对php支持,但是目前有用户说ligttpd的spwan-fcgi在高并发访问的时候,会出现上面说的内存泄漏甚至自动重启fastcgi。即:PHP脚本处理器当机,这个时候如果用户访问的话,可能就会出现白页(即PHP不能被解析或者出错)。

Nginx不像lighttpd本身含带了fastcgi(spawn-fcgi),因此它完全是轻量级的,必须借助第三方的FastCGI处理器才可以对PHP进行解析,因此其实这样看来nginx是非常灵活的,它可以和任何第三方提供解析的处理器实现连接从而实现对PHP的解析(在nginx.conf中很容易设置)。

nginx可以使用spwan-fcgi(需要一同安装lighttpd,但是需要为nginx避开端口,一些较早的blog有这方面安装的教程),但是由于spawn-fcgi具有上面所述的用户逐渐发现的缺陷,现在慢慢减少使用nginx+spawn-fcgi组合了。

由于spawn-fcgi的缺陷,现在出现了新的第三方(目前还是,听说正在努力不久将来加入到PHP core中)的PHP的FastCGI处理器,叫做PHP-FPM(具体可以google)。它和spawn-fcgi比较起来有如下优点:

由于它是作为PHP的patch补丁来开发的,安装的时候需要和php源码一起编译,也就是说编译到php core中了,因此在性能方面要优秀一些。同时它在处理高并发方面也优于spawn-fcgi,至少不会自动重启fastcgi处理器。具体采用的算法和设计可以google了解。

因此,如上所说由于nginx的轻量和灵活性,因此目前性能优越,越来越多人逐渐使用这个组合:nginx+PHP/PHP-FPM 。

Note:HTTP服务器是如何实现对PHP支持的相关推荐

  1. Google帮助IE浏览器实现对SVG支持

    可缩放矢量图形(SVG)的意识就是一个用于描述二维矢量图形的一种开放图形格式.  SVG现在已经能够广泛得应用到许多的项目当中,包括KDE和维基百科等.但是 Internet Explorer浏览器的 ...

  2. 用Python脚本实现对Linux服务器的监控

    一.前言 二.概述 三.Python 版本说明 四./proc 文件系统 五.对CPU监测 六.对系统负载监测 七.对内存信息的获取 八.对网络接口的监测 九.监控apache服务器进程的Python ...

  3. 用 Python 脚本实现对 Linux 服务器的监控

    版本说明 Linux 服务器是 Ubuntu 12.10 Python 版本 是 2.7 工作原理:基于/proc 文件系统 Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核, ...

  4. JAVA ftps设置_Java使用JSCH实现对FTPS服务器文件操作

    SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.SFTP 为 SSH的一部份,是一种传输文件到服务器的安全方式.SF ...

  5. 【五一创作】使用Scala二次开发Spark3.3.0实现对MySQL的upsert操作

    使用Scala二次开发Spark实现对MySQL的upsert操作 背景 在我们的数仓升级项目中,遇到了这样的场景:古人开发的任务是使用DataStage运算后,按照主键[或者多个字段拼接的唯一键]来 ...

  6. maven mybatis mysql_Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问...

    标签: 本篇内容还是建立在上一篇Java Web学习系列--Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Ja ...

  7. 修改html时webpack热更新,利用webpack实现对html文件的热更新

    webpack中webpack-dev-server是一个简单的web服务器,能够帮助咱们实现代码的热更新,即在实际开发中只需保存修改完后的代码,不用手动刷新页面就能够看到效果.在使用webpack- ...

  8. ML之K-means:基于K-means算法利用电影数据集实现对top 100 电影进行文档分类

    ML之K-means:基于K-means算法利用电影数据集实现对top 100 电影进行文档分类 目录 输出结果 实现代码 输出结果 先看文档分类后的结果,一共得到五类电影: 实现代码 # -*- c ...

  9. cactus java,使用cactus实现对servlet进行单元测试

    使用cactus实现对servlet进行单元测试 步骤如下: [1]创建Web工程ServletTestDemo 在myeclipse中创建Web project,命名为ServletTestDemo ...

最新文章

  1. SAP MM 采购发票上的价格与采购订单上价格的差异
  2. dlopen failed: library “libopencv_java4.so“ not found 解决
  3. 9月往后推6个月是几月_成考每年一般几月份颁发毕业证书
  4. LaTeX中警告类型及说明
  5. 【数理知识】《数值分析》李庆扬老师-第8章-矩阵特征值计算
  6. Spring Boot怎么样引入Thymeleaf模板引擎
  7. 来和 webpack 谈场恋爱吧!这课程好甜!
  8. 使用Chatkit构建Node.js命令行聊天应用程序
  9. git 忽略__pycache___容易被忽略的 Python 命令行参数
  10. 安装(python 版)
  11. fatal error LNK1120: 11 unresolved externals
  12. 英雄联盟修复返回服务器异常,玩LOL英雄联盟在XP中服务器连接异常退出的恢复步骤...
  13. 问题 K: 数字统计
  14. 位运算:二进制中1的个数
  15. java feature类_Java FeatureCollection类代码示例
  16. summernote 字体名字不显示_觉得 Windows 10 显示字体不好看吗? 教你轻松更换成 Mac 字体版本。...
  17. 在MySQL中生成随机经度和纬度
  18. 对于网络文学而言 计算机叙事,【网络文学论文】传统文学中网络文学特征研究(共4573字)...
  19. 对于阿里云的oss上传本地图片的相关注意点
  20. 国行switch商店服务器维护,国行Nintendo Switch e商店商城常见问题解答

热门文章

  1. R语言构建xgboost模型:模型的保存(xgb.save)和加载(xgb.load)、或者保存为R二进制文件(xgb.save.raw R binary vector)
  2. python-requests官网_requests使用心得
  3. Jenkins安装与配置
  4. A networkIntegration Approach for Drug-Target interaction Prediction and ComputationalDrug Repositio
  5. 字符串string类的使用:回文
  6. 服务器连接超时不响应怎么回事,勇者斗恶龙x服务器没有响应连接超时解决方法...
  7. db2安装包v10.5_LINUX安装db2V10.5步骤
  8. linux校时写入硬件,手动校正 Linux 系统时间并把时间写入硬件,系统启动时自动校正时间并把时间写入硬件。...
  9. numpy 数组 独热编码 one hot
  10. pycharm 自动函数注释