登录 |  注册 |  繁體中文


php在不同服务器下的工作模式

分类: php 颜色:橙色 默认  字号: 阅读(2231) | 评论(0)

一、php在apache中运行模式

php在apache中一共有三种工作方式:CGI模式、FastCGI模式、Apache 模块DLL)

1、PHP 在 Apache 中以 CGI 模式运行的配置
AddType application/x-httpd-php .php
ScriptAlias /php/ "e:/php/"
Action application/x-httpd-php "/php/php-cgi.exe"

2、PHP 在 Apache 中以模块方式运行的配置
LoadModule php5_module "e:/php/php5apache2_2.dll"
AddType application/x-httpd-php .php
# 配置 php.ini 的路径
PHPIniDir "e:/php"

3、PHP在Apache中以FastCGI模式运行的配置
#加载mod_fastcgi模块
LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP20.dll
AddType application/x-httpd-php .php
#设置FastCGI运行路径和进程数量
FastCgiServer "e:/php/php-cgi.exe" -processes 3
#将php-cgi.exe所在的路径定义别名为fcgi-php5,为什么要定义别名呢?请继续看
ScriptAlias /php/ "e:/php/"
Action application/x-httpd-php "/php/php-cgi.exe"

二、php 在nginx 中的运行模式(nginx+PHP-FPM )目前理想选择

使用FastCGI方式现在常见的有两种stack:ligthttpd+spawn-fcgi; 另外一种是nginx+PHP-FPM(也可以用spawn-fcgi) 。

(1) 如上面所说该两种结构都采用FastCGI对PHP支持,因此HTTPServer完全解放出来,可以更好地进行响应和并发处理。因此lighttpd和nginx都有small, but powerful和efficient的美誉。

(2) 该两者还可以分出一个好坏来,spawn-fcgi由于是lighttpd的一部分,因此安装了lighttpd一般就会使用spawn-fcgi对php支持。

(3) nginx不像lighttpd本身含带了fastcgi(spawn-fcgi),因此它完全是轻量级的,必须借助第三方的FastCGI处理器才可以对PHP进行解析,因此其实这样看来nginx是非常灵活的,它可以和任何第三方提供解析的处理器实现连接从而实现对PHP的解析(在nginx.conf中很容易设置)。

因此,如上所说由于nginx的轻量和灵活性,因此目前性能优越,越来越多人逐渐使用这个组合:nginx+PHP/PHP-FPM


三、IIS+ ISAPI模式

ISAPI(Internet Server Application Programming Interface,因特网服务器应用程序接口)
 

四、以上工作方式的区别:
1、在CGI(Common Gateway Interface,通用网关接口)模式下,如果客户机请求一个php文件,Web服务器就调用php.exe去解释这个文件,每一个Web请求PHP都必须重新解析php.ini、重新载入全部dll扩展并重初始化全部数据结构,然后再把解释的结果以网页的形式返回给客户机。处理完后结束这个子进程。这就是fork-and-execute模式。所以用cgi 方式的服务器有多少连接请求就会有多少cgi子进程,子进程反复加载是cgi性能低下的主要原因。你可以想象 CGI通常有多慢。

2、在模块化(DLL)中,PHP是与Web服务器一起启动并运行的。所以从某种角度上来说,以apache模块方式安装的 PHP有着比CGI模式更好的安全性以及更好的执行效率和速度。

3、fast-cgi 是cgi的升级版本,FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全称PHP FastCGI进程管理器进行管理。
FastCGI的工作原理
(3.1)、Web Server 启动时载入FastCGI进程管理器
(3.2)、FastCGI进程管理器自身初始化,启动多个CGI解释器进程 (在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接。
(3.3)、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi.exe。
(3.4)、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在 WebServer中)的下一个连接。 在CGI模式中,php-cgi.exe在此便退出了。

4. FastCGI 模式运行PHP 的优点:
以 FastCGI 模式运行 PHP 有几个主要的好处。首先就是 PHP 出错的时候不会搞垮 Apache,只是 PHP 自己的进程宕掉(但 FastCGI 会立即重新启动一个新 PHP 进程来代替当掉的进程)。其次 FastCGI 模式运行 PHP 比 ISAPI 模式性能更好。使用FastCGI,解析php.ini一次。


五、总结

目前在HTTPServer这块基本可以看到有三种stack比较流行:

(1)Apache+mod_php5
(2)lighttp+spawn-fcgi
(3)nginx+PHP-FPM

三者后两者性能可能稍优,但是Apache由于有丰富的模块和功能,目前来说仍旧是老大。有人测试nginx+PHP-FPM在高并发情况下可能会达到Apache+mod_php5的5~10倍,现在nginx+PHP-FPM使用的人越来越多。




姓 名: *
邮 箱:
内 容: *
验证码: 点击刷新 *   

回到顶部