PHP-FPM和FastCGI

embedded/2024/10/15 15:31:37/

文章目录

  • 前言
  • 一. FastCGI
    • 1.定义
    • 2.工作方式
    • 3.协议
    • 4.架构
    • 5.工作原理(请求生命周期)
  • 二. PHP-FPM
    • 1.定义:
    • 2.特性
    • 3.进程管理模式
    • 4.工作流程
  • 三.关系与应用
  • 四.配置示例
  • 五.性能优化
  • 六.配置选项
  • 七.常见问题及解决方案


前言

PHP-FPM 是基于 FastCGI 的一种专门用于 PHP 的进程管理工具,提供了更高效的请求处理和更好的性能管理,FastCGI 是一种高效的协议,而 PHP-FPM 是 PHP 的实现


一. FastCGI

1.定义

FastCGI 是一种接口协议,用于将 HTTP 请求与后端应用程序(如 PHP、Python 等)连接。它是 CGICommon Gateway Interface)的改进版本,提供了更好的性能和资源管理

2.工作方式

FastCGI 通过保持持久的进程来处理多个请求,避免了 CGI 每次请求都创建新进程的开销,这使得处理请求的速度更快

3.协议

FastCGI 是一种独立于语言的协议,允许 Web 服务器和后端应用程序之间高效通信

4.架构

客户端-服务器模型:FastCGI 实现了客户端-服务器模型,其中 Web 服务器(如 NginxApache)作为客户端,FastCGI 应用程序作为服务器

持久进程:FastCGI 通过创建持久的工作进程来处理请求,这些进程在初次启动后可以处理多个请求,而不是为每个请求创建新的进程

5.工作原理(请求生命周期)

连接建立:Web 服务器与 FastCGI 应用程序建立 TCP 连接或通过 Unix 域套接字连接

请求处理:当 Web 服务器接收到请求时,会将请求信息(如请求方法、URI、参数等)传递给 FastCGI 进程

响应返回:FastCGI 进程处理请求并将响应(如 HTML 页面、JSON 数据等)返回给 Web 服务器

连接保持:处理完请求后,连接保持打开状态,准备处理后续请求

二. PHP-FPM

1.定义:

PHP-FPM 是 PHP 的一个实现,它利用 FastCGI 协议来处理 PHP 请求。它是 PHP 的一个替代方式,提供了进程管理和更好的性能

2.特性

进程管理:PHP-FPM 能够管理多个 PHP 进程,支持进程的启动、停止和重启,以适应不同负载

请求队列:支持对请求的队列处理,可以更好地管理并发请求

慢日志记录:能够记录处理慢请求的信息,以便进行性能优化

进程池:允许配置多个进程池,每个池可以有不同的设置(如用户权限、资源限制等)

3.进程管理模式

PHP-FPM 支持多种进程管理模式,如动态、静态和按需,可以根据实际需求选择合适的模式

4.工作流程

初始化:启动时,PHP-FPM 会根据配置文件启动多个 PHP 进程,并将其放入进程池中,准备接受请求

请求分发:当 Web 服务器发送请求时,PHP-FPM 会从进程池中选择一个空闲的进程来处理请求

处理请求:选中的 PHP 进程接收到请求,执行相应的 PHP 脚本,并生成输出

返回响应:处理完请求后,PHP-FPM 将结果返回给 Web 服务器,Web 服务器再将响应发送回客户端

三.关系与应用

关系:PHP-FPM 是基于 FastCGI 的实现,使用 FastCGI 协议来与 Web 服务器(如 Nginx 或 Apache)进行通信,可以将 PHP-FPM 视为 FastCGI 的一个具体实现,专门针对 PHP 进行优化

应用场景:PHP-FPM 通常与 Nginx 一起使用,因为 Nginx 本身不直接支持 mod_php(Apache 的 PHP 模块),通过 FastCGI,Nginx 可以高效地将请求转发给 PHP-FPM,处理 PHP 代码

四.配置示例

Nginx 配置示例

php">server {listen 80;server_name example.com;root /var/www/html;index index.php index.html index.htm;location / {try_files $uri $uri/ /index.php?$query_string;}location ~ \.php$ {include fastcgi_params;fastcgi_pass 127.0.0.1:9000;  # PHP-FPM 监听的地址fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;}
}

PHP-FPM 配置示例(在 php-fpm.conf 或对应的池配置文件中)

php">; 监听地址和端口
listen = 127.0.0.1:9000; 进程管理设置
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10; 其他配置
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slow.log

五.性能优化

  1. 进程池配置
    动态管理:通过动态模式,PHP-FPM 会根据当前的负载自动调整进程数量
    pm.max_children 控制最大进程数,pm.start_servers 控制启动时的进程数,pm.min_spare_serverspm.max_spare_servers 控制闲置进程的最小和最大数量
  2. 请求缓冲
    缓冲输出:使用 output_buffering 配置可以在处理请求时将输出缓冲,减少与 Web 服务器的交互次数,提高性能
  3. 连接设置
    FastCGI 参数:配置 FastCGI 参数,如 fastcgi_param,以确保传递所需的所有环境变量,可以使用 SCRIPT_FILENAMEQUERY_STRING 等参数

六.配置选项

  1. 进程管理模式
    pm = static:始终保持固定数量的进程,适用于负载稳定的环境
    pm = dynamic:动态调整进程数量,适用于流量波动大的环境
    pm = ondemand:只在有请求时启动进程,适用于负载较轻的环境
  2. 安全性
    用户和组:通过配置文件中的 usergroup 指令,确保 PHP-FPM 进程以特定用户身份运行,增强安全性
    限制请求:使用 request_terminate_timeout 可以设置每个请求的最大执行时间,避免长时间运行的请求占用资源

七.常见问题及解决方案

  1. 性能瓶颈
    慢请求:使用 request_slowlog_timeoutslowlog 选项,可以记录处理时间超过指定时间的请求
  2. 资源限制
    内存限制:使用 php_admin_value[memory_limit] 设置每个 PHP 进程的内存限制,防止个别请求消耗过多内存
  3. 日志管理
    错误日志:配置 error_log 指令,确保及时记录和监控错误信息,以便进行调试和优化

http://www.ppmy.cn/embedded/127927.html

相关文章

【计算机网络 - 基础问题】每日 3 题(四十)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…

【原创】可用于 Android Studio 的翻译插件

在不少讲解Android 开发的老师视频中会出现一个运行在Android Studio 上的翻译插件,感觉挺实用的。 接下来,我们把它安装在我们的Android Studio 上。 设置 点击右上角齿轮按钮,选择Settings 安装 翻译插件 输入Tanslation,选…

计算机网络:数据链路层 —— 以太网(Ethernet)

文章目录 局域网局域网的主要特征 以太网以太网的发展100BASE-T 以太网物理层标准 吉比特以太网载波延伸物理层标准 10吉比特以太网汇聚层交换机物理层标准 40/100吉比特以太网传输媒体 局域网 局域网(Local Area Network, LAN)是一种计算机网络&#x…

Java设计模式——装饰模式

目录 模式动机 模式定义 模式结构 类图 代码分析 示例:动态添加功能的流 组件接口 具体组件 装饰抽象类 具体装饰类 客户端 模式分析 核心思想 动态扩展功能 组合优于继承 优点 动态扩展功能 组合优于继承 代码复用性高 符合开闭原则 缺点 增加…

打破传统:机器学习与神经网络获2024年诺贝尔物理学奖引发的思考

诺贝尔物理学奖首次颁发给机器学习与神经网络领域的研究者,这一结果无疑引起了广泛关注,并引发了大量的讨论与思考。作为一项传统上旨在表彰对自然科学,尤其是物理学领域作出突出贡献的奖项,这次将荣誉授予一个长期与计算机科学、…

四川方维嘉术科技有限公司简介

四川方维嘉术科技有限公司 公司简介 四川方维嘉术科技有限公司成立于2023年,注册资本100万元整,位于中国西南地区的中心位置,是一家专注于供应医疗设备、高值耗材并提供医疗方面解决方案的企业。 【主要代理产品】 湖南瑞康通 &#xff1…

Unity3D 同步怪物实体到客户端详解

在游戏开发中,经常会遇到需要同步怪物实体到客户端的需求。本文将详细介绍如何在Unity3D中实现怪物实体的同步,并给出技术详解以及代码实现。 对惹,这里有一个游戏开发交流小组,大家可以点击进来一起交流一下开发经验呀&#xff…

Vue(3) 组件

文章目录 对组件的理解单文件组件非单文件组件基本使用几个注意点组件的嵌套VueComponent构造函数一个重要的内置关系 组件的自定义事件全局事件总线安装全局事件总线使用事件总线解绑事件消息订阅与发布简介使用步骤范例 $nextTick插槽1.默认插槽2.具名插槽作用域插槽 对组件的…