百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

PHP-FPM 学习记录(php.fpm)

moboyou 2025-07-23 17:57 2 浏览

什么是FastCGI

请阅读FastCGI(Fast Common Gateway Interface)的理解

这里不再赘述

什么是(PHP-FPM)

  1. PHP5.4之前只是用来管理php-cgi进程的进程管理器,实现了fastCGI协议的程序
  2. PHP官方从PHP5.4版本将PHP-FPM集成到了PHP官方发布的包中,这时PHP-FPM同时具备进程管理器及PHP解释器的能力,直接把php解释器的功能集成进PHP-FPM了

PHP-FPM具备哪些功能

  • 支持平滑停止/启动的高级进程管理功能

PHP-FPM进程是由一个master进程和多个work进程配合工作。master进程主要管理事件信号接受和分发。所有的请求都是由work进程处理并将处理结果返回。

master接收到重启或重载配置文件的信号后,会通知所有的work进程不再接收新的请求。master会另起新的work进程来处理新的请求。然后会通知旧的work进程处理完成正在进行的工作后退出,运用此原理实现平滑停止和启动

  • 可以工作于不同的uid/gid/chroot环境下,并监听不同的端口和使用不同的php.ini配置文件(可取代safe_mode的设置)

gid为groupid,即组id,用来标识用户组的唯一标识符;uid为userid,即用户id,用来标识每个用户的唯一标示符。用户组:将同一类用户设置为同一组,如可将所有的系统管理员设置为admin组,便于分配权限,将某些重要的文件设置为所有admin组用户可以读写,这样可以进行权限分配,每个用户有一个唯一的用户id,每个用户组都有唯一的组id。charoot为change root,就是改变程序执行时所参考的根目录位置,可以增进系统的安全性,限制使用者能做的事。safe_mode是一种安全模式。

  • stdout 和 stderr 日志记录

标准输出和标准错误日志记录

  • OPcode被意外破坏时紧急重启
  • 文件上传优化支持
  • 支持慢日志记录
  • FastCGI 的增强功能

例如 fastcgi_finish_request() - 一个特殊的函数来完成请求并刷新所有数据,同时继续做一些耗时的事情(视频转换、统计处理等)

PHP-FPM配置说明

1、php-fpm.conf全局配置说明

pid:需要配置一个文件路径,用来存储master的进程id;示例:

pid = /etc/php-fpm.pid

error_log:错误日志的存储位置。默认:#INSTALL_PREFIX#/log/php-fpm.log。 如果设置为 "syslog",日志将不会写入本地文件,而是发送到 syslogd。示例:

error_log = /var/log/php-fpm/error.log

log_level:错误级别。可用级别为:alert(必须立即处理),error(错误情况),warning(警告情况),notice(一般重要信息),debug(调试信息)。默认:notice。示例:

log_level = notice

syslog.facility:设置何种程序记录消息,默认值:daemon,记录linux系统日志。示例:

syslog.facility = daemon

syslog.ident:为每条信息添加前缀。 如果在同一台服务器上运行了多个 FPM 实例,可以修改此默认值来满足需求。默认值:php-fpm。示例:

syslog.ident = php-fpm

log_limit:设置日志文件单行字符数上限。如果超出此方向,会进行换行处理。默认是1024字节

log_limit = 4096

log_buffering:日志是否记录缓冲区。默认值true,如果设置为no,会直接写入日志文件

log_buffering = no


emergency_restart_threshold
(int):如果子进程在
emergency_restart_interval 设定的时间内收到该参数设定次数的 SIGSEGV 或者 SIGBUS退出信息号,则FPM会重新启动。0 表示“关闭该功能”。默认值:0(关闭)。示例:

emergency_restart_threshold = 100


emergency_restart_interval(
mixd):用于设定平滑重启的间隔时间。这么做有助于解决加速器中共享内存的使用问题。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。示例:

emergency_restart_interval = 60s

process_control_timeout(mixd):设置子进程接受主进程复用信号的超时时间。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。即reload的时候,如果有正在执行的请求进程便会等待该进程设置的时长。而其他进程直接就结束掉。等待正在执行的进程执行完或者是超过了设置的时间后fpm的master进程才开始生成新的fpm worker进程.示例:

process_control_timeout = 60s

process.max(int):Fork 的最大 FPM work进程数。使用动态管理进程数量时,此设计可以控制在一个进程池内的全局进程数量,pm=dynamic模式下生效。 使用需谨慎。默认值:0,为不限制。示例:

process.max = 128

process.priority (int):

指定要应用于主进程的nice(2)优先级(仅在设置时)该值可以在-19(最高优先级)到20(最低优先级)之间变化,示例:

process.priority = -19

注意:只有当FPM主进程以root用户身份启动时,它才会工作-除非另有规定,否则池进程将继承主进程优先级

daemonize (bool):设置 FPM 在后台运行。设置“no”将 FPM 保持在前台运行用于调试。默认值:yes。示例:

daemonize = no

注意:如果是通过dockerfile来启动php-fpm服务,这个就需要设置为no,否则php-fpm无法通过启动容器 同时启动(已踩过此坑)

rlimit_files (int):设置 master 进程打开文件描述符的 rlimit 数量,可使用 ulimit -n 查看。默认为系统默认值。示例:

rlimit_files = 1024

rlimit_core :设置核心rlimit最大限制值. 可用值: ‘unlimited’ 、0或者正整数. 默认值: 系统定义值,示例:

rlimit_core = 0

events.mechanism (string):设置 FPM 使用的事件机制。 可用以下选项:select、

pool、epoll、kqueue (*BSD)、port (Solaris)。 默认值:不设置(自动检测)。示例:

events.mechanism = epoll

systemd_interval (int):使用 systemd 集成的 FPM 时,设置间歇秒数,报告健在通知给 systemd。 设置为 0 表示禁用。默认值:10.示例:

systemd_interval = 10

2、运行配置

prefix (string):检测路径时使用的前缀。示例:

prefix = /path/to/pools/$pool

user (string):FPM 进程运行的Unix用户。必须设置。示例:

user = apache

group (string):FPM 进程运行的 Unix 用户组。如果不设置,就使用默认用户的用户组,示例:

group = apache

listen (string):设置接受 FastCGI 请求的地址。可用格式为:'ip:port','port','/path/to/unix/socket'。每个进程池都需要设置。示例:

listen = [::]:9000

注意:当web server 与应用服不是同一台(或不是同一个容器时)时,这里不能设置为127.0.0.1:9000,这样时不通的,(已踩坑)

listen.backlog (int):设置 listen(2) 的 backlog 最大值。“-1”表示无限制。默认值(php7.4):511。示例:

listen.backlog = 511

listen.allowed_clients (string):设置允许连接到 FastCGI 的服务器 IPV4 地址。等同于 PHP FastCGI (5.2.2+) 中的 FCGI_WEB_SERVER_ADDRS 环境变量。仅对 TCP 监听起作用。每个地址是用逗号分隔的,如果没有设置或者为空,则允许任何服务器请求连接。默认值:any。 PHP 5.5.20 和 5.6.4起,开始支持 IPv6 地址。示例:

listen.allowed_clients = 127.0.0.1,192.168.2.25


listen.owner/listen.group/listen.mode
(string):如果使用了 Unix 套接字,表示它的权限。在 Linux 中必须设置读/写权限,以便用于 WEB 服务器连接。 在很多 BSD 派生的系统中可以忽略权限允许自由连接。 默认值:运行所使用的用户和组,权限为 0660。示例:

listen.owner = user
listen.group = usergroup
listen.mode = 0660

listen.acl_users (string):当系统支持 POSIX ACL(Access Control Lists)时,可以设置使用此选项。 当设置了的时候,将会忽略 listen.owner 和 listen.group。 值是逗号分割的用户名列表。 PHP 5.6.5 起可用。示例:

listen.acl_users = apache,nginx

listen.acl_groups (string):作用和listen.acl_users同理,值是逗号分割的用户组名称列表。 PHP 5.6.5 起可用。

listen.acl_groups =apache,nginx

pm (string):设置进程管理器如何管理子进程。可用值:static,ondemand,dynamic。必须设置。static - 子进程的数量是固定的(通过pm.max_children)。ondemand - 进程在有需求时才产生(当请求时才启动。与 dynamic 相反,在服务启动时 pm.start_servers 就启动了。dynamic - 子进程的数量在下面配置的基础上动态设置:pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers。示例:

pm = dynamic

pm.max_children (int):pm 设置为 static 时表示创建的子进程的数量,pm 设置为 dynamic 时表示最大可创建的子进程的数量。必须设置。示例:

pm.max_children = 30

pm.start_servers (int):设置启动时创建的子进程数目。仅在 pm 设置为 dynamic 时使用。默认值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。示例:

pm.start_servers = 5

pm.min_spare_servers (int):设置空闲服务进程的最低数目。仅在 pm 设置为 dynamic 时使用。必须设置,示例:

pm.min_spare_servers = 5

pm.max_spare_servers (int):设置空闲服务进程的最大数目。仅在 pm 设置为 dynamic 时使用。必须设置,示例:

pm.max_spare_servers = 30

pm.process_idle_timeout (mixd):秒数,多久之后结束空闲进程。 仅当设置 pm 为 ondemand。 可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:10s。示例:

pm.process_idle_timeout = 10s

pm.max_requests (int):设置每个子进程在处理了多少个请求数量之后就重启。如果设置为 '0' 则一直接受请求,不重启,等同于 PHP_FCGI_MAX_REQUESTS 环境变量。默认值:0。示例:

pm.max_requests = 300


pm.status_path (string):FPM 状态页面的网址。如果没有设置,则无法访问状态页面,默认值:无。示例:

pm.status_path = /fpmStatus

效果:



ping.path (string):FPM 监控页面的 ping 网址。如果没有设置,则无法访问 ping 页面。该页面用于外部检测 FPM 是否存活并且可以响应请求。请注意必须以斜线开头(/);示例:

ping.path = /fpm_ping

效果:


ping.response (string):用于定义 ping 请求的响应返回内容。返回为 HTTP 200 的 text/plain 格式文本。默认值:pong。示例:

ping.response = 200

效果:


process.priority (int):设置 worker 的 nice(2)优先级(如果设置了的话)。 该值从 -19(最高优先级) 到 20(更低优先级)。 默认值:不设置。示例:

process.priority = -19

access.log (string):Access log 文件。 默认值:不设置

access.log = /var/logs/php-fpm.access.log

access.format (string):access log 的格式。 默认值: "%R - %u %t \"%m %r\" %s",示例:

access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"

slowlog (srting):慢日志文件及路径,示例:

slowlog = /var/log/php-fpm/www-slow.log

request_slowlog_timeout (mixed):记录慢日志的请求时间阀值,当一个请求处理时间超出该配置后,会记录到slowlog中。设置为 '0' 表示 'Off'。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。

request_slowlog_timeout = 3s

request_terminate_timeout (mixd):设置单个请求的超时中止时间。该选项可能会对 php.ini 设置中的 'max_execution_time' 因为某些特殊原因没有中止运行的脚本有用。设置为 '0' 表示 'Off'。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。示例:

request_terminate_timeout = 10s

chroot (string):启动时的 Chroot 目录。所定义的目录需要是绝对路径。如果没有设置,则 chroot 不被使用。示例:

chroot = /dir

chdir (string):设置启动目录,启动时会自动 Chdir 到该目录。所定义的目录需要是绝对路径。默认值:当前目录,或者根目录(chroot时)。示例:

chdir = /var/www

catch_workers_output (boolean):重定向运行过程中的 stdout 和 stderr 到主要的错误日志文件中。如果没有设置,stdout 和 stderr 将会根据 FastCGI 的规则被重定向到 /dev/null。默认值:无。示例:

catch_workers_output = yes

clear_env (boolean):为 FPM worker 进程清除环境变量。 在进程池配置文件里设置环境变量前,阻止任意系统的环境变量进入 FPM worker 进程。 自 PHP 5.4.27、 5.5.11 和 5.6.0 起。 默认值: Yes,示例:

clear_env = yes

security.limit_extensions (string):限制 FPM 允许解析的脚本扩展名。 此设置可以预防 web 服务器配置的错误。 应当限制 FPM 仅仅解析 .php 扩展名,阻止恶意用户使用其他扩展名运行 php 代码。 默认值: .php .phar,示例:

security.limit_extensions = .php

相关推荐

运维从头到尾安装日志服务器,看这一篇就够了

一、rsyslog部署1.1)rsyslog介绍Linux的日志记录了用户在系统上一切操作,看日志去分析系统的状态是运维人员必须掌握的基本功。rsyslog日志服务器的优势:1、日志统一,集中式管理...

被MySQL慢日志查询搞废了?3分钟教你快速定位慢查询问题

一条慢查询会造成什么后果?刚开始使用MySQL的开发、初级DBA以为就是简单的查询变慢些,体验稍微有一丢丢影响,殊不知,慢查询的破坏力远不止如此。业务高峰期,这头SQL还没处理完,大量新的查询请求堆...

Linux 查看系统日志 执行日志 安全日志 history 登录日志

修改history记录打开配置文件vim/etc/profile或~/.bash_profile显示执行的用户及其IP添加,将下面内容添加到末尾USER_IP=`who-uami2>/...

Linux系统日志的简单分析(linux系统日志文件有哪些)

为了保证Linux系统正常运行、准确解决遇到的各种各样的系统问题,认真地读取日志文件是系统管理员的一项非常重要的任务。因为日志文件能够详细记录系统每天发生的各种各样的事件。用户可以通过日志文件检查错误...

如何按天切割日志文件(日志切割命令)

简单明了,直接开始,给热爱编程的你我apache修改httpd.conf对以下两行进行调整ErrorLog"|/usr/local/apache/bin/rotatelogs/data/...

Apache 记录请求响应时间日志(apache日志查看)

本文章向大家介绍Apache记录请求响应时间日志,主要包括Apache记录请求响应时间日志使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。官网介绍在A...

Linux系统LOG日志分析与管理(四)——配置Loganalyzer

摘要:Loganalyzer是一款syslog日志和其他网络事件数据的Web前端工具。它提供了对日志的浏览、搜索、基本分析和一些图表报告的功能。其分析所需数据可以从数据库或一般的syslog文本文件中...

PHP-FPM 学习记录(php.fpm)

什么是FastCGI请阅读FastCGI(FastCommonGatewayInterface)的理解这里不再赘述什么是(PHP-FPM)PHP5.4之前只是用来管理php-cgi进程的进程管理...

Nginx access_log 运行日志查询和配置

1.介绍当我们学会Nginx的基本配置之后,可以通过Nginx配置Service代理。管理服务器所有的http和https请求。那么接下来就需要了解Nginx的日志控制,以及相关的文档查看了。你通过...

PHP 单例模式(php单例模式和工厂模式)

单例模式(SingletonPattern)单例模式(SingletonPattern):顾名思义,就是只有一个实例。作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向...

PHP之单例模式(php 单例模式优点及如何实现)

单例模式属于创建型模式,何为创建型模式,即创建型模式抽象了实例化过程。他们帮助一个系统独立于如何创建、组合和表示他的那些对象。一个类创建型模式使用继承改变被实例化的类。而一个对象创建型模式将实例化委托...

2022年SEO还需要交换友情链接吗(seo还有用吗)

友情链接是什么意思?这是一个古老的话题,但对于现在的正规网站依然行之有效,本篇详细讲讲2022年对友情链接的理解与操作。今天,小小课堂网(www.xxkt.org.cn)带来的是《2022年SEO...

基于maxkb实现对话一键生成docx分析报告,支持图片和表格

通过扩展maxkb的知识库管理和ai对话能力,实现一键生成分析报告及word文档;本次优化点在于:实现用户输入多个问题,一键生成分析报告,并提供word文件将内容下载下来word中支持markdown...

新版证书查询系统源码 支持自适应多端

TP开发证书查询系统适用于各行业相关证书查询,基于ThinkPHP开发,可以同时多字段区配查询,后台管理界面清新,可批量导入导出数据,格式为:JSON、CSV、Excel等,自适应手机端,PC端...

Rocky Linux 9 源码包安装php8(rocksdb 源码)

RockyLinux9源码包安装php8大家好,我是星哥!今天咱们不聊yum一键安装的“快餐式”部署,来点儿硬核的——源码编译安装PHP8.3。为什么要折腾源码?因为它能让你深度定制PHP功能...