我正在使用这个tutorial在我的新网络服务器上安装nginx,php和mysql。
本教程使用的是ISPConfig 3,可以选择使用FastCgi还是PHP-FPM。
我想知道哪两个更好。在性能和速度方面,哪两个最适合与nginx一起使用?
顺便说一下,我的服务器上也启用了memcached和xcache。
答案 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(不需要安全模式)。- 记录
STDOUT
和STDERR
。- 如果使用加速器意外破坏共享内存操作码缓存,则能够紧急重启所有进程。
- 如果
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方面:
在php-fpm方面: