`
Tzhennan
  • 浏览: 58133 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Nginx 与 FPM 的工作机制

 
阅读更多

要说 Nginx 与 PHP 是如何协同工作的,首先得说 CGI (Common Gateway Interface) 和 FastCGI 这两个协议。

 

CGI 是 Web Server 与后台语言交互的协议,有了这个协议,开发者可以使用任何语言处理 Web Server 发来的请求,动态的生成内容。但 CGI 有一个致命的缺点,那就是每处理一个请求都需要 fork 一个全新的进程,随着 Web 的兴起,高并发越来越成为常态,这样低效的方式明显不能满足需求。就这样,FastCGI 诞生了,CGI 很快就退出了历史的舞台。FastCGI,顾名思义为更快的 CGI,它允许在一个进程内处理多个请求,而不是一个请求处理完毕就直接结束进程,性能上有了很大的提高。

 

至于 FPM (FastCGI Process Manager),它是 FastCGI 的实现,任何实现了 FastCGI 协议的 Web Server 都能够与之通信。

 

FPM 是一个 PHP 进程管理器,包含 master 进程和 worker 进程两种进程:master 进程只有一个,负责监听端口,接收来自 Web Server 的请求,而 worker 进程则一般有多个 (具体数量根据实际需要配置),每个进程内部都嵌入了一个 PHP 解释器,是 PHP 代码真正执行的地方

 

从 FPM 接收到请求,到处理完毕,其具体的流程如下:

 

1、FPM 的 master 进程接收到请求

2、master 进程根据配置指派特定的 worker 进程进行请求处理,如果没有可用进程,返回错误,这也是我们配合 Nginx 遇到502错误比较多的原因。

3、worker 进程处理请求,如果超时,返回504错误

4、请求处理结束,返回结果

 

FPM 从接收到处理请求的流程就是这样了,那么 Nginx 又是如何发送请求给 fpm 的呢?这就需要从 Nginx 层面来说明了。

 

我们知道,Nginx 不仅仅是一个 Web 服务器,也是一个功能强大的 Proxy 服务器,除了进行 http 请求的代理,也可以进行许多其他协议请求的代理,包括本文与 fpm 相关的 fastcgi 协议。为了能够使 Nginx 理解 fastcgi 协议,Nginx 提供了 fastcgi 模块来将 http 请求映射为对应的 fastcgi 请求。

 

Nginx 的 fastcgi 模块提供了 fastcgi_param 指令来主要处理这些映射关系,其主要完成的工作是将 Nginx 中的变量翻译成 PHP 中能够理解的变量。

 

除此之外,非常重要的就是 fastcgi_pass 指令了,这个指令用于指定 fpm 进程监听的地址,Nginx 会把所有的 php 请求翻译成 fastcgi 请求之后再发送到这个地址。

 

分享到:
评论

相关推荐

    理解 Nginx 与 PHP-FPM 通信的工作机制

    理解 Nginx 与 PHP-FPM 通信的工作机制

    php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式

    本文将深入探讨PHP与Nginx的处理方式以及Nginx与PHP-FPM之间的两种通信方式。首先,让我们了解PHP与Nginx的两种处理PHP请求的方法。 1. IP:Port 监听方式: 在这个模式下,Nginx通过指定的IP地址和端口(例如...

    开源电子书:Nginx 开发手册文档.pdf

    7. 结构与扩展:Nginx 采用主进程和多个工作进程的结构,工作进程是单线程的,且不需要特殊授权即可运行。 8. kqueue、epoll、rt signals、/dev/poll 和 select 支持:Nginx 支持多种事件机制,包括 kqueue、epoll、...

    高流量站点NGINX与PHP的优化

    为了确保网站的稳定性和响应速度,在高流量环境下优化NGINX与PHP-fpm配置至关重要。本文将详细介绍如何针对高流量站点进行NGINX与PHP-fpm的优化配置。 #### 一、理解高流量站点的需求 高流量站点通常指的是那些...

    nginx Web服务器代码

    **Nginx Web服务器代码详解** Nginx是一款高性能、轻量级的Web服务器和反向代理服务器,因其高效的并发处理...通过提供的`nginx-0.7.61`源码,开发者可以进一步研究Nginx的内部机制,定制化自己的Web服务器解决方案。

    PHP-FPM和Nginx的通信机制详解

    **Nginx与PHP-FPM的通信机制** 当用户访问一个网站(如www.test.com/index.php)时,Nginx作为反向代理服务器,首先接收到请求。Nginx会加载fastcgi模块,并通过TCP或UNIX socket与PHP-FPM进行通信。TCP socket适用...

    nginx-php配置测试通过

    对于性能优化,可以调整Nginx和PHP-FPM的配置,例如设置合适的缓存大小、调整工作进程数量等。 总结,Nginx与PHP的整合对于搭建高效、稳定的动态网站环境至关重要。通过合理配置Nginx和PHP-FPM,以及针对特定框架如...

    nginx1.8.1

    Nginx 的轻量级特性使其成为与 PHP-FPM、Tomcat 集群配合的理想选择。 **一、Nginx 作为图片服务器** 1. **静态资源处理**:Nginx 对于静态文件如图片、CSS、JavaScript 等的处理非常高效,可以直接从硬盘或缓存中...

    [官方]Complete NGINX Cookbook

    1. **基础配置**:介绍如何安装NGINX,理解其基本工作原理,包括事件模型和多进程模型。学习如何编写基本的配置文件,设置监听端口,处理HTTP请求,并理解配置文件的层次结构。 2. **静态文件服务**:讲解如何用...

    Nginx从入门到实践-基础视频教程.txt.zip

    例如,设置反向代理以分发负载,使用Nginx与PHP-FPM结合实现PHP应用的部署,以及利用Nginx实现URL重写,优化网站访问路径。 **第四章 深度学习篇** 在这个阶段,课程会带你深入理解Nginx的工作原理,如事件模型、...

    nginx安装包

    若需处理动态内容,如 PHP,Nginx 可与 PHP-FPM(FastCGI 进程管理器)配合工作。配置过程如下: 1. 安装 PHP-FPM 和相关 PHP 模块: ```bash sudo apt-get install php-fpm php-mysql ``` 2. 修改 Nginx 站点...

    深入理解Nginx模块开发与架构解析完整-高清-目录-最新版

    在架构解析部分,读者将了解到Nginx的启动流程、进程间通信机制、缓存系统、日志记录以及与其他应用如PHP-FPM的集成方式。理解这些内容有助于优化Nginx部署,提高系统性能。 此外,书籍可能还会涉及Nginx与其他技术...

    nginx-1.21.6安装包

    在开发环境中,Nginx常与各种Web框架如PHP-FPM、Node.js、Python的WSGI等配合使用,提供高性能的动态内容处理能力。同时,Nginx的模块化设计允许开发者编写自定义模块,扩展其功能以满足特定需求。总的来说,nginx-...

    nginx视频教程1

    为了提高网站的安全性,Nginx提供了多种机制来防御常见的安全威胁。 - **限制IP访问**: - 可以通过`limit_req`或`limit_conn`指令限制来自特定IP地址的请求频率。 - 示例配置: ```nginx http { limit_req_...

    nginx1.24.0 windows版

    - Nginx 可以与PHP-FPM、FastCGI配合实现动态内容处理,比如搭建WordPress、Drupal等PHP应用。 - 与Docker、Kubernetes等容器技术结合,实现微服务架构下的部署和管理。 8. **故障排查**: - 查看Nginx错误日志...

    nginx 技术 分析

    **Nginx技术分析** Nginx是一款高性能的HTTP和反向代理服务器,以其轻量级、高并发处理能力和稳定性而备受赞誉。...同时,了解Nginx与其他开源软件(如PHP-FPM、MySQL等)的协同工作也是至关重要的。

    实战nginx-全

    1. **多进程与多线程**:Nginx可以采用主进程+工作进程模式,主进程负责管理和接收新的连接,工作进程处理实际的请求。 2. **并发连接数**:通过调整worker_processes和worker_connections参数来优化并发处理能力。 ...

    nginx-1.11.5.tar.gz

    1. **源代码目录**:包含所有源代码文件,如`src/core`、`src/event`、`src/http`等,分别对应Nginx的核心功能、事件处理机制和HTTP协议处理模块。 2. **配置脚本**:`configure`是编译Nginx前的配置脚本,用于检查...

    nginx文件包

    1. **事件驱动模型**:Nginx采用异步非阻塞的事件处理机制,通过epoll(Linux)、kqueue(FreeBSD)等系统调用来实现高效处理大量并发连接。 2. **多进程模型**:Nginx通常由一个主进程和多个工作进程组成。主进程...

Global site tag (gtag.js) - Google Analytics