FastCgi vs PHP-FPM使用Nginx web服务器


FastCgi vs PHP-FPM using Nginx web server

我正在使用这个教程在我的新web服务器上安装nginx, php和mysql。

本教程使用的是ISPConfig 3,可以选择使用FastCgi还是PHP-FPM。

我想知道两者中哪一个更好。在性能和速度方面,两者中哪一个是最好的内联使用nginx?

顺便说一句,我也在我的服务器上启用了memcached和xcache。

PHP- fpm比旧的FastCGI处理PHP要好得多。从PHP 5.3.3开始,PHP- fpm是核心,旧的FastCGI实现不再可用。

我的答案刚刚被否决(在网上出现了很长一段时间之后),我明白为什么,所以这里列出了为什么PHP-FPM实际上比旧的FastCGI实现更好。

首先,很长一段时间以来,FastCGI的实现在PHP社区中是很糟糕的。一个可以在https://wiki.php.net/ideas/fastcgiwork找到的页面,上面写着:

php-cgi在生产环境中没有额外的"拐杖"是没有用的(例如,从lighttpd发行版或php-fpm补丁生成-fcgi)。本项目假定集成了这些"拐杖",并扩展了php-cgi以支持不同的协议。

  • 守护进程(分离,pid文件创建,设置环境变量,setuid/setgid/chroot)
  • 优美的重启
  • 分离和改进传输层以允许支持不同的协议
  • 支持SCGI协议
  • 对HTTP协议子集的支持

下面是一个PHP-FPM做得更好的事情列表,摘自http://php-fpm.org/about/:

    PHP守护:pid文件、日志文件、setsid()setuid()setgid()chroot()
  • 流程管理。能够"优雅地"停止和启动PHP工作线程,而不会丢失任何查询。这允许逐步更新配置和二进制文件,而不会丢失任何查询。
  • 限制请求的IP地址。
  • 动态进程数,取决于负载(自适应进程生成)
  • 启动具有不同uid/gid/chroot/environment和不同php.ini选项的worker(不需要安全模式)。
  • 记录STDOUTSTDERR .
  • 如果使用加速器,在意外破坏共享内存操作码缓存时紧急重启所有进程的能力。
  • set_time_limit()失败时强制完成进程。

附加功能:-错误报头-加速上传支持——fastcgi_finish_request()-慢日志与回溯

一个小更正:PHP FastCGI SAPI仍然可用,即使在PHP 5.5.x。

[root@zulu1 ~]# /usr/local/php54/bin/php-cgi -v 
PHP 5.4.17 (cgi-fcgi) (built: Jul 18 2013 05:12:07) 
Copyright (c) 1997-2013 The PHP Group 
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

fastcgi的一面:

    Fastcgi更容易监控:在fastcgi中,每个用户有一个pid。在有许多帐户的web服务器上,很容易发现超载的进程。另一方面,php-fpm根据请求创建许多进程+一个主进程。当你有很多来自不同IP的连接时,这会很混乱。
  1. Fastcgi配置更容易:Fastcgi包含在apache配置中。这样事情就简单多了。另一方面,php-fpm需要额外的配置文件。如果有配置依赖,会让事情变得复杂。
  2. 大的共享主机公司仍然没有使用php-fpm在2015年的php 5.6今天,所有最大的共享网络托管公司(bluehost,hostgator,namecheap)都使用fastcgi。我认为他们不提供php-fpm作为php-handler的原因。

php-fpm端:

  1. 我注意到php-fpm消耗比fastcgi少20%,fastcgi消耗比mod_php少20%。因此,php-fpm适合具有最小内存的web服务器。