mod_php模式

可以看出要求是发送到Apache,之后由Apache来解析处理PHP并返回结果给客户端。
当我们利用LAMP架构时,须要改动Apache的配置文件httpd.conf

加入如下两句LoadModule phpx_module PHP_ROOT/phpxapache2_2.dllAddType appliaction/x-httpd-php.php将下面语句做如下修正<IfModule dir_module> DirectoryIndex index.html</IfModule>改为 <IfModule dir_module> DirectoryIndex index.html index.htm index.php index.phtml</IfModule>

利用LoadModule来加载phpx_module(x为PHP版本号)。
可以理解为将PHP作为Apache的一个子模块来运行,当要求访问PHP时,Apache就会调用phpx_module来解析PHP代码

fpm与phpPHP理论常识之fastcgi与phpfpm的差别 Vue.js

php_module是如何解析PHP代码的呢?——通过sapi。

Apache和PHP与sapi的关系如下图:

sapi便是一个中间层,供应和外部通信的接口,类似于socket,使得PHP可以和其他运用进行数据交互。
PHP供应了多种sapi,如给Apache和Nginx的php_module,给IIS的ISAPI等。

Apache调用PHP的实行过程:

Apache -> httpd -> php_module -> sapi -> PHP

总之,Web做事器通过php_module办法解析实行PHP的模式即为mod_php。

mod_fastcgi模式

PHP的sapi的另一种办法便是供应cgi模式,现在cgi已经被fastcgi取代。

所谓cgi,便是common gateway interface,当Web做事器收到要求,就会把要求交给cgi程序(如PHP的fastcgi),cgi就将要求做处理(解析PHP),然后将结果返回给Web做事器,Web做事器再将要求返回给客户端。

cgi的不敷之处便是每次要求都会有启动和退出的过程,也便是饱受诟病的fork-and-execute模式,在大量并发的请况下就塌台了。

fastcgi的出身填补这一不敷,它的事理是早早启动好等待要求,在相应完要求后不会退出,连续等待下一个要求。

利用fastcgi的运行办法称为mod_fastcgi。

比拟一下mod_php和mod_fastcgi的不同。
前者是将PHP作为Web做事器的一个模块来运行,PHP与做事器结合度大。
后者是将fastcgi作为中间过程,PHP和Web做事器只通过fastcgi来完成要求与相应。

mod_php模式下,Apache每接管一个要求,就会产生一个进程来连接PHP通过sapi完成要求,在高并发的情形下,显然做事器会无法承受。

这张图可以看出,每当有要求到达时,httpd会调用sapi将要求通报给PHP,完成后不退出,等待下一要求。
并发性能大大提高。

php-fpm

磨刀不误砍柴工,前面的讲解只为引出php-fpm。
php-fpm是做什么的呢?实在便是用来赞助fastcgi的。

fastcgi是一种与平台无关,与措辞无关的接口实现,只须要不同措辞按照规定办法实现即可完成与Web做事器的通信。
上图所示的php-cgi便是PHP自带的fastcgi管理器。

网上看到的php-cgi的问题紧张有两点:

1.php-cgi变更php.ini陪之后须要重启php-cgi才能使新的php.ini生效,不能平滑重启。
2.若直接杀去世php-cgi,PHP便无法运行

php-fpm完美办理了上述不敷,是一款专用的fastcgi管理器。

总之,php-fpm的浸染便是专门管理PHP中的fastcgi,使PHP在高并发的情形下也能安全稳定的与Web做事器互助,完成要求相应过程。