Nginx与php-fpm之间的关系

本文介绍了Nginx和php-fpm在动态网页开发中的合作方式,阐述了cgi和fast-cgi的区别,重点讲解了fast-cgi的工作机制以及Nginx如何通过fast-cgi协议与php-fpm交互,处理动态PHP文件的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在web开发中Nginx和php-fpm(下文简称fpm)之间的协同工作是进行动态网页开发的关键。

  • 首先我们先来了解一下cgi和fast-cgi。

    • cgi是是web server和后台语言交互的协议,有了这个协议开发者可以使用任何后台语言处理web server的请求,动态生成内容返回。但是cgi协议有一个致命的缺陷就是每一个请求都会执行一次fork创建一个子进程,子进程通过加载配置文件、初始化执行环境然后才开始处理请求,处理完成后结束该处理进程。随着web开发的兴起,高并发越来越成为了常态,这样的处理方式以满足不了日常的高并发需求,于是fast-cgi就出现了。
    • fast-cgi,顾名思义是一个更快地cgi协议,与cgi不同的是允许一个进程处理多个请求,而不是处理完一个请求就结束。fast-cgi协议采用的是一个master进程管理多个worker进程的模式处理请求的。当一个请求来临时首先master进程会加载配置文件(php.ini)、初始化执行环境并解析请求,然后选用一个worker进程进行实际的处理,worker进程处理完返回之后继续等待master分配。
  • Nginx(web sever)担任的是一个内容分发者的角色,如果客户端(浏览器)请求的是index.html文件,即静态文件,Nginx会去文件系统中找到该文件发送给浏览器。当请求的是index.php文件,即动态文件的时候,Nginx通过配置将该文件交给php解析器处理(Nginx不会对任何文件做处理),Nginx就通过fast-cgi协议将请求发送给php解析器处理。

  • fpm是一个 php进程管理器,包含 master 进程和 worker 进程两种进程:master 进程只有一个,负责监听端口,接收来自 web server 的请求,而 worker 进程则一般有多个 (具体数量根据实际需要配置),每个进程内部都嵌入了一个 php 解释器,是 php 代码真正执行的地方。从fpm接收到请求到处理完毕经历了如下过程:

    • fpm的master收到请求加载php.ini文
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值