1. PHP三种运行方式mod_php5/cgi/fast-cgi
1.1. a.通过HTTPServer内置的模块来实现,
例如Apache的mod_php5,类似的Apache内置的mod_perl可以对perl支持;
1.2. b.通过CGI来实现
这个就好比之前perl的CGI,该种方式的缺点是性能差,因为每次服务器遇到这些脚本都需要重新启动脚本解析器来执行脚本然后将结果返回给服务器;另一方面就是不太安全;该方面几乎很少使用了。
1.3. c.最新出现一种叫做FastCGI。
所谓FastCGI就是对CGI的改进。它一般采用C/S结构,一般脚本处理器会启动一个或者多个daemon进 程,每次HTTPServer遇到脚本的时候,直接交付给FastCGI的进程来执行,然后将得到的结果(通常为html)返回给浏览器。
该种方法的问题存在一个小问题是当遇到大流量的频繁请求的话,脚本处理器的daemon进程可能会超负荷从而变得很慢,甚至发生内存泄漏;
但是比较起Apache的内置模块的方式的优点是由于Server和脚本解析器完全分开各负其责,因此服务器不再臃肿,可以专心地进行静态文件响 应或者将动态脚本解析器的结果返回给用户客户端。所以比较起Apache的内置模块方式,有时候性能要提高很多。有人测试可能会达到 Apache+mod_php的5~10倍。
1.3.1. 三种常用模式:
Apache+mod_php5;
lightppd+spawn-fcgi;
nginx+PHP-FPM
1.3.2. 我们可以使用到生产环境中的:
1.3.3. 0) 如果不是server cluster的话:
可以使用以上任一种,不过有各种测试表明nginx+PHP-FPM性能优越,但是Apache+mod_php5很经典模块多,比如对.htaccess等的支持。
1.3.4. 如果构建server cluster的话:
1.3.5. 1) nginx作为反向代理服务器,后台多台Apache+mod_php5。
nginx处理静态文件,及对php并发请求对后台多台app server的负载均衡;
1.3.6. 2) nginx作为反向代理器,后台多台PHP-FPM
nginx处理静态文件及将php并发请求发送到后台php-fpm来解析;
通常就是IIS里面配置解释器为php.exe,早期比较常见,目前使用较少。 特点是:稳定,但效率太低。
2)ISAPI方式加载PHP环境
通常就是IIS里面配置解释器为php5isapi.dll,目前使用最多,应用最广。 特点是:多线程,效率较高,但不够稳定。
3)FastCGI方式加载PHP环境
在IIS环境里并不常见,但其它系统环境应用还是有的,不过IIS7.0开始内置FastCGI了。 特点是:高效率,高稳定性,属于将来发展趋势。