您的位置 首页 php

PHP-FPM 学习记录

什么是 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  

效果:

localhost/fpmStatus

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

 ping.path = /fpm_ping  

效果:

访问localhost/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  

文章来源:智云一二三科技

文章标题:PHP-FPM 学习记录

文章地址:https://www.zhihuclub.com/79112.shtml

关于作者: 智云科技

热门文章

网站地图