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

jay*_*abs 12 php memcached fastcgi nginx xcache

我正在使用本教程在我的新Web服务器上安装nginx,php和mysql.

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

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

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

Fle*_*der 19

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

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

首先,很长一段时间以来,PHP社区中的FastCGI实现很糟糕.可以在https://wiki.php.net/ideas/fastcgiwork上找到的文档页面,其中显示:

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

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

以下是从http://php-fpm.org/about/获取的PHP-FPM做得更好的列表:

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

其他功能: - 错误标题 - 加速上传支持 - fastcgi_finish_request() - 带回溯的慢速日志

  • 为什么它"更好"? (5认同)

小智 6

一个小的修正: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
Run Code Online (Sandbox Code Playgroud)