当前位置: 首页 > news >正文

PHP-FPM和FastCGI

文章目录

  • 前言
  • 一. 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 配置示例

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 或对应的池配置文件中)

; 监听地址和端口
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 指令,确保及时记录和监控错误信息,以便进行调试和优化

相关文章:

PHP-FPM和FastCGI

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

【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)

目录 零.前置篇章 一.make的由来 二.安装make 三.编写Makefile 四.编译运行 五.删除可执行文件 零.前置篇章 第一篇【Linux快速入门】Linux与ROS学习之编译基础(gcc编译)_linuxros-CSDN博客 一.make的由来 "make"是一个用于自…...

jupyterlab的安装与使用攻略/包括汉化方法

官网链接 Project Jupyter | Home 1.第一步安装 打开控制台 使用pip工具安装 pip install jupyterlab 如图 2.安装成功后启动 jupyter lab 会自动启动它的web页面 然后就可以正常使用咯!! 如果需要更换浏览器访问 新开控制台执行下面命令 jupy…...

std::list

std::list是C标准库中的一个序列容器,它提供了双向链表的功能。std::list允许在序列的任何位置高效地插入和删除元素,而不会引起其他元素的移动,这使得std::list在需要频繁插入和删除操作的场景中非常有用。 std::list的特性: 双…...

opencv-rust 系列2: camera_calibration

opencv-rust 系列2: camera_calibration 前言: 这里只是opencv-rust自带示例的中文注解. 略微增加了一些代码也是我在调试时用到的. 说明: camera_calibration.rs是opencv-rust自带的示例, 在examples目录中可以找到,我增加了一些中文注释如下.如需运行可以在项目根目录执行命…...

JVM和GC案例详解

接上文JVM环境配置说明:上文博客 一、JVM远程连接设置 1. JMX方式连接(这种方式没有GC监控),设置如下 2. 连接成功后可以查看基础配置参数(和服务器配置一致) 2. jstatd方式连接(这种方式没有CPU监控) 添加jstatd方式连接 双击Tomcat&#xff0…...

postgreSql下载安装

一、下载 官网:PostgreSQL: The worlds most advanced open source database 二、安装 1.找到.exe文件,双击安装 2.跟着安装向导操作 三、启动...

GPT-SOVIT模型部署指南

一、模型介绍 强大的小样本语音转换和文本转语音 WebUI。 具有以下特征: 零样本 TTS: 输入 5 秒的声音样本并体验即时文本到语音的转换。少量样本 TTS: 仅使用 1 分钟的训练数据对模型进行微调,以提高语音相似度和真实感。跨语…...

怎么定时发朋友圈?

要实现微信朋友圈的定时发布,可以采用以下几种方法: 1、 绑定QQ号并使用QQ空间定时功能: 于微信和QQ的紧密联系,可以通过绑定QQ号,利用QQ空间的定时发布功能来间接实现微信朋友圈的定时发布。首先,在QQ空…...

如何利用phpstudy创建mysql数据库

phpStudy诞生于2007年,是一款老牌知名的PHP开发集成环境工具,产品历经多次迭代升级,目前有phpStudy经典版、phpStudy V8(2019版)等等,利用phpstudy可以快速搭建一个mysql环境,接下来我们就开始吧…...

五、Linux之Vi和Vim编辑器

基本介绍 Vi Linux 系统会内置 vi 文本编辑 Vim 具有程序编辑的能力,可以看做是 Vi 的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。 代码补完、编译及错误跳转等方便编程的功能特别丰富 常用的三种模式 正常模式 以 vim …...

git删除错误的commit

文章目录 1、git删除错误的commit2、.gitignore配置文件不生效的问题 1、git删除错误的commit git的流程如图: 当某次失误造成commit的版本有问题,需要回退到正常的版本修改后重新add。 首先通过git log查看commit提交记录,可以看到HEAD-…...

代码随想录算法训练营Day08 | 344.反转字符串、541. 反转字符串II、卡码网:54.替换数字

文章目录 344.反转字符串思路与重点 541. 反转字符串II思路与重点 卡码网:54.替换数字思路与重点 344.反转字符串 题目链接:344. 反转字符串 - 力扣(LeetCode)讲解链接:代码随想录 (programmercarl.com)状态&#xff…...

mysql锁之乐观锁、悲观锁、表锁、行锁、共享锁、排他锁

mysql锁之乐观锁、悲观锁、表锁、行锁、共享锁、排他锁 MySQL锁概述 锁是计算机协调多个进程或线程并发访问某一个资源的机制,在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资…...

【软件干货】Android应用进程如何保活?

​1.Android 应用进程保活方法介绍 在Android应用程序中,为了保证应用的正常运行和稳定性,有时需要对应用进程进行保活。以下是一些实现进程保活的方法: 1、使用前台服务(Foreground Service):将服务调用startForeground()方法&…...

neo4j部署保姆级教程

由于公司是基于大数据架构的,让部署neo4j数据库,之前没有接触过,然后紧急学了一下,并且从网上找了一些教程,决定还是记录下来,后续有时间了会在出一篇使用教程 环境准备(root用户) …...

【STM32CubeMX开发】-2.2-TIM_输出一个PWM信号

目录 1 Tim定时器的时钟源 2 Tim定时器的配置 2.1 PWM配置 2.2 中断配置 3 生成代码 4 测试结果 结尾 1 Tim定时器的时钟源 TIM3的时钟来源自APB1 Timer clocks,时钟树上所有总线频率均设置为了STM32F0能达到的最高频率,此时APB1 Timer clocks …...

Ngx+Lua+Redis 快速存储POST数据

系统几万台设备有windows有安卓还有linux系统,每个设备三分钟就会向服务器post设备的硬件信息,数据格式json,后台管理界面只需要最新的数据,不需要历史数据,业务逻辑非常简单,PHP代码就几行,已经…...

go-delve的使用

go-delve的非交互使用方式: dlv要执行的命令文件:cmd.dlv goroutines exit 执行非交互命令: yes n | dlv --allow-non-terminal-interactivetrue attach $pid --init cmd.dlv --end--...

Python网络爬虫技术详解

Python网络爬虫技术详解 引言 网络爬虫(Web Crawler),又称网络蜘蛛(Web Spider)或网络机器人(Web Robot),是一种按照一定规则自动抓取互联网信息的程序或脚本。它们通过遍历网页链…...

COMSOL实现煤层注气THM耦合的甲烷开采效果模拟与可视化分析

一、COMSOL实现煤层注气热力流THM耦合下增强甲烷开采 本案例采用热力流三场耦合,分析煤层注入CO2增强甲烷开采效果,涉及热-流-固数学模型、多气相介质作用,全部为PDE模块 二、可以出煤层温度、瓦斯含量、渗透率等许多云图及数据,仅…...

终极指南:5分钟掌握TegraRcmGUI Switch注入工具的核心能力

终极指南:5分钟掌握TegraRcmGUI Switch注入工具的核心能力 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI TegraRcmGUI是一款专为Nintendo Switc…...

rk3576 点亮 LCD(mipi)

rk3576 适配 mipi 屏 瑞芯微 RK3576 是一款面向中高端 AIoT 市场的 SoC,其 MIPI DSI (Display Serial Interface) 接口在性能和灵活性上相比前代(如 RK3399/RK3568)有显著提升,特别是在物理层协议的支持上更加现代化。相比RK3399 RK3568的mipi 接口少了 8lane,但是RK3576…...

Linux 核心操作合集(网络配置、XShell远程连接、vim文本编辑与操作、权限管理 实操手册)

一、网络连接管理(nmli)(一)nmcli命令行配置IPtylmyhost:~$ nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.24.24/24 tylmyhost:~$ nmcli connection modify ens160 ipv4.gateway 192.168.24.2 tyl…...

Ubuntu 18.04 + CUDA 11.3 下,手把手教你搞定 MinkowskiEngine 的编译安装(附避坑指南)

Ubuntu 18.04 CUDA 11.3 环境下的 MinkowskiEngine 编译实战指南 在3D点云处理和稀疏卷积领域,MinkowskiEngine 凭借其高效的稀疏张量计算能力已成为研究者的重要工具。然而,其复杂的依赖关系和编译过程常常让开发者望而却步。本文将基于 Ubuntu 18.04…...

打破游戏边界:Sunshine构建你的无缝云游戏体验

打破游戏边界:Sunshine构建你的无缝云游戏体验 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想象一下这样的场景:你在客厅的智能电视上玩着3A大作&#x…...

GLM-4.1V-9B-Base基础教程:Web界面支持的图片格式/大小/分辨率清单

GLM-4.1V-9B-Base基础教程:Web界面支持的图片格式/大小/分辨率清单 1. 模型简介 GLM-4.1V-9B-Base是智谱开源的视觉多模态理解模型,专门用于处理图像内容识别、场景描述、目标问答和中文视觉理解任务。这个模型已经完成了Web化封装,可以直接…...

3步掌握AI模型训练:让新手也能玩转个性化Stable Diffusion模型

3步掌握AI模型训练:让新手也能玩转个性化Stable Diffusion模型 【免费下载链接】sd-trainer 项目地址: https://gitcode.com/gh_mirrors/sd/sd-trainer 在数字创意领域,AI绘画模型训练曾是一道高不可攀的技术门槛。设计师面对复杂的代码配置望而…...

从静态到动态:开源AI视频生成工具如何用3分钟改变你的创作方式

从静态到动态:开源AI视频生成工具如何用3分钟改变你的创作方式 【免费下载链接】stepvideo-ti2v 项目地址: https://ai.gitcode.com/StepFun/stepvideo-ti2v 在AI技术日新月异的今天,视频创作正经历着一场前所未有的革命。阶跃星辰推出的Step-Vi…...

AI辅助开发:模仿PS创意效果,用快马生成智能艺术风格迁移应用代码

最近在做一个艺术风格迁移的小项目,正好用到了InsCode(快马)平台的AI辅助开发功能,整个过程特别顺畅。这个项目的灵感来源于PS的创意效果,但想用更智能的方式来实现类似功能。下面分享一下我的实现思路和经验。 项目构思 最初是想做一个能让普…...