php 与 web 服务器的关系

php 属于后端语言的一种,它可以为 web 服务器提供服务。但 php 本身属于一种动态语言,不能像普通的 html 之类的静态文件被 web 服务器直接识别并返回给客户端,它需要额外的解释说明和转换。

像螺丝和螺母上的螺纹工作原理一样,php 和 web 服务器在对外提供服务时也需要提供接口。php 提供对的接口服务叫做 SAPI,而 web 服务器提供的接口服务有两种,一种是 CGI,这种已经基本淘汰,后来的优化版叫 FastCGI;另外一种是 Apache 特有的服务模块 php5_module(或者 php7_module),这种服务模式也叫 mod_php。而 PHP-FPM (PHP FastCGI Process Manager) 全称叫 PHP FastCGI 进程管理器,是专门来辅助 mod_fastcgi 模式的。

所以一般的 web 服务请求过程如下(php):

request -> Apache -> mod_php -> SAPI -> PHP

request -> Apache / Nginx / IIS -> FastCGI(PHP-FPM) -> SAPI -> PHP

光看这流程,感觉 FastCGI 模式加了 PHP-FPM 让请求处理更慢了,其实主要是优化了服务器处理请求的过程,把处理脚本的工作交给后面的 PHP-FPM 子进程去做,有点分布式的感觉。这样前面的服务器能够同步处理的请求就可以更多一些。

以下是一些配置使用 php-fpm 的教程:

nginx和php-fpm调用方式 - cnblogs

php-fpm安装、配置与优化 - csdn

php-fpm的安装和启动 - zybuluo

php连接apache ,使用php-fpm方式 - cnblogs

apache 安装配置 以及php-fpm结合apache配置 - Mzc's blog - cnblogs

Linode VPS 上 CentOS 7 中改 LAMP 执行方式为 PHP-FPM - 水景一页

Apache httpd 2.4.x 使用 mod_proxy_fcgi 和 PHP-FPM 的方式 - 水景一页

文章目录