nginx 与 php-fpm

Nginx与PHP-FPM集成解析
本文详细解析了Nginx如何通过PHP-FPM处理PHP请求,介绍了PHP-FPM作为FastCGI进程管理器的功能,包括进程管理、内存控制、平滑重载配置等优势,以及其架构和工作原理。

前言

nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回客户端。 nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx。
非常详细的解释参考链接:
segmentfault.com/q/101000000…
segmentfault.com/a/119000000…

什么是PHP-FPM

PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 php-fpm.org/download下载得…
PHP-FPM原本是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。
新版PHP已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官方收录了。在./configure的时候带–enable-fpm参数即可开启PHP-FPM。

PHP FastCGI进程管理器PHP-FPM的架构

一个master进程,支持多个pool,每个pool由master进程监听不同的端口,pool中有多个worker进程。
每个worker进程都内置PHP解释器,并且进程常驻后台,支持prefork动态增加。
每个worker进程支持在运行时编译脚本并在内存中缓存生成的opcode来提升性能。
每个worker进程支持配置响应指定请求数后自动重启,master进程会重启挂掉的worker进程。
每个worker进程能保持一个到MySQL/Memcached/Redis的持久连接,实现"连接池",避免重复建立连接,对程序透明。

如果worker进程不够用,master进程会prefork更多进程, 如果prefork达到了pm.max_children上限,worker进程又全都繁忙, 这时master进程会把请求挂起到连接队列backlog里(默认值是511).

工作原理,参考:www.stelin.me/2017/06/09/…

fpm全名是FastCGI进程管理器,fpm启动后会先读php.ini,然后再读相应的conf配置文件,conf配置可以覆盖php.ini的配置。 启动fpm之后,会创建一个master进程,监听9000端口(可配置),master进程又会根据fpm.conf/www.conf去创建若干子进程,子进程用于处理实际的业务。 当有客户端(比如nginx)来连接9000端口时,空闲子进程会自己去accept,如果子进程全部处于忙碌状态,新进的待accept的连接会被master放进队列里,等待fpm子进程空闲;这个存放待accept的半连接的队列有多长,由listen.backlog配置。

三种工作模式
php-fpm(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站非常有用。php-fpm进程管理一共有三种模式:ondemand、static、dynamic(静态池、服务优先、内存优先),我们可以在同一个fpm的master配置三种模式。

php-fpm的工作模式和nginx类似,都是一个master,多个worker模型。每个worker都在accept本机pool内的监听套接字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值