Answers:
如文档所述,如果需要避免使用线程与非线程安全的库兼容,则应使用prefork MPM。通常,任何不平凡的Apache模块(mod_php
或更确切地说,是它链接到的众多扩展和库-都是典型的例子)都具有某种非线程安全的库(或具有非线程安全的库)。安全代码),因此除非您使用大量的Apache安装,否则我会选择prefork MPM。
php-fpm
通过FastCGI 附加PHP,则这些问题不适用。然后,工作程序MPM就很好了-然后,fpm将在自己的进程中运行每个PHP请求,而Apache可以线程化运行。PHP线程安全性问题仅阻止您使用mod_php
,后者在Apache进程内运行PHP。
在服务大量(> 100个)并发连接时运行不安全扩展的经典解决方案是在fastCGI(mod_fcgid,本机apache模块)上运行PHP,并将动态请求代理到运行Worker MPM的apache实例。
当混合使用静态和动态内容时,这可以使您从数百个并发连接扩展到具有适度内存(4〜8GB)的> 1000。
当然,您还应该在整体部署(memcached,varnish)中研究前端缓存解决方案。
或者,升级到apache 2.4及其本地事件 MPM,该事件以一种大大改进的方式处理并发(连接时会触发线程,而不必等待被轮询。)
需要您拥有的流量类型和种类。首先,您还需要了解前叉和工人之间的主要区别。希望下面的文章能帮助您找到答案! http://slashroot.in/how-is-nginx-different-from-apache