使用Nginx Web服务器的FastCgi与PHP-FPM

时间:2013-06-17 06:30:58

标签: nginx memcached fastcgi php xcache

我正在使用这个tutorial在我的新网络服务器上安装nginx,php和mysql。

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

我想知道哪两个更好。在性能和速度方面,哪两个最适合与nginx一起使用?

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

3 个答案:

答案 0 :(得分:19)

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

我的答案刚好被投票(在网上相当一段时间后)并且我理解为什么,所以这里列出了为什么PHP-FPM实际上比旧的FastCGI实现更好。

首先,很久以前就知道FastCGI实现在PHP社区中很糟糕。可在https://wiki.php.net/ideas/fastcgiwork处找到的文档页面,其中包含:

  

php-cgi在没有额外“拐杖”的生产环境中没用(例如来自lighttpd发行版或php-fpm补丁的spawn-fcgi)。该项目假设整合了这种“拐杖”并扩展php-cgi以支持不同的协议。

     
      
  • 守护进程(分离,pid文件创建,安装环境变量,setuid / setgid / chroot)
  •   
  • graceful restart
  •   
  • 分离并改进传输层以支持不同的协议
  •   
  • 支持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()    - 带回溯的慢速日志

答案 1 :(得分:6)

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

[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

答案 2 :(得分:0)

在fastcgi方面:

  1. Fastcgi更容易监控: fastcgi中每个用户有一个pid。在具有许多帐户的Web服务器上,很容易找到重载过程。另一方面,php-fpm根据请求+一个主进程创建许多进程。当你有来自不同IP的大量连接时,这很麻烦。
  2. Fastcgi配置更容易: Fastcgi包含在apache配置中。所以它让事情变得更容易。另一方面,php-fpm需要额外的配置文件。如果存在配置依赖性,则会使事情变得复杂。
  3. 大型共享托管公司在2015年仍然没有使用php-fpm和php 5.6 今天,所有最大的共享网络托管公司(bluehost,hostgator,namecheap)使用fastcgi,但他们不使用php-fpm,我认为有理由说他们不提供php-fpm作为php-handler。
  4. 在php-fpm方面:

    1. 我注意到php-fpm比fastcgi少20%,比mod_php少20%。因此,php-fpm适用于具有最小内存量的Web服务器。