什么是FastCGI 请阅读FastCGI(FastCommonGatewayInterface)的理解 这里不再赘述什么是(PHPFPM)PHP5。4之前只是用来管理phpcgi进程的进程管理器,实现了fastCGI协议的程序PHP官方从PHP5。4版本将PHPFPM集成到了PHP官方发布的包中,这时PHPFPM同时具备进程管理器及PHP解释器的能力,直接把php解释器的功能集成进PHPFPM了PHPFPM具备哪些功能支持平滑停止启动的高级进程管理功能 PHPFPM进程是由一个master进程和多个work进程配合工作。master进程主要管理事件信号接受和分发。所有的请求都是由work进程处理并将处理结果返回。 master接收到重启或重载配置文件的信号后,会通知所有的work进程不再接收新的请求。master会另起新的work进程来处理新的请求。然后会通知旧的work进程处理完成正在进行的工作后退出,运用此原理实现平滑停止和启动可以工作于不同的uidgidchroot环境下,并监听不同的端口和使用不同的php。ini配置文件(可取代safemode的设置) gid为groupid,即组id,用来标识用户组的唯一标识符;uid为userid,即用户id,用来标识每个用户的唯一标示符。用户组:将同一类用户设置为同一组,如可将所有的系统管理员设置为admin组,便于分配权限,将某些重要的文件设置为所有admin组用户可以读写,这样可以进行权限分配,每个用户有一个唯一的用户id,每个用户组都有唯一的组id。charoot为changeroot,就是改变程序执行时所参考的根目录位置,可以增进系统的安全性,限制使用者能做的事。safemode是一种安全模式。stdout和stderr日志记录 标准输出和标准错误日志记录OPcode被意外破坏时紧急重启文件上传优化支持支持慢日志记录FastCGI的增强功能 例如fastcgifinishrequest()一个特殊的函数来完成请求并刷新所有数据,同时继续做一些耗时的事情(视频转换、统计处理等)PHPFPM配置说明 1、phpfpm。conf全局配置说明 pid:需要配置一个文件路径,用来存储master的进程示例:pidetcphpfpm。pid errorlog:错误日志的存储位置。默认:INSTALLPREFIXlogphpfpm。log。如果设置为syslog,日志将不会写入本地文件,而是发送到syslogd。示例:errorlogvarlogphpfpmerror。log loglevel:错误级别。可用级别为:alert(必须立即处理),error(错误情况),warning(警告情况),notice(一般重要信息),debug(调试信息)。默认:notice。示例:loglevelnotice syslog。facility:设置何种程序记录消息,默认值:daemon,记录linux系统日志。示例:syslog。facilitydaemon syslog。ident:为每条信息添加前缀。如果在同一台服务器上运行了多个FPM实例,可以修改此默认值来满足需求。默认值:phpfpm。示例:syslog。identphpfpm loglimit:设置日志文件单行字符数上限。如果超出此方向,会进行换行处理。默认是1024字节loglimit4096 logbuffering:日志是否记录缓冲区。默认值true,如果设置为no,会直接写入日志文件logbufferingno emergencyrestartthreshold(int):如果子进程在emergencyrestartinterval设定的时间内收到该参数设定次数的SIGSEGV或者SIGBUS退出信息号,则FPM会重新启动。0表示关闭该功能。默认值:0(关闭)。示例:emergencyrestartthreshold100 emergencyrestartinterval(mixd):用于设定平滑重启的间隔时间。这么做有助于解决加速器中共享内存的使用问题。可用单位:s(秒),m(分),h(小时)或者d(天)。默认单位:s(秒)。默认值:0(关闭)。示例:emergencyrestartinterval60s processcontroltimeout(mixd):设置子进程接受主进程复用信号的超时时间。可用单位:s(秒),m(分),h(小时)或者d(天)。默认单位:s(秒)。默认值:0(关闭)。即reload的时候,如果有正在执行的请求进程便会等待该进程设置的时长。而其他进程直接就结束掉。等待正在执行的进程执行完或者是超过了设置的时间后fpm的master进程才开始生成新的fpmworker进程。示例:processcontroltimeout60s process。max(int):Fork的最大FPMwork进程数。使用动态管理进程数量时,此设计可以控制在一个进程池内的全局进程数量,pmdynamic模式下生效。使用需谨慎。默认值:0,为不限制。示例:process。max128 process。priority(int): 指定要应用于主进程的nice(2)优先级(仅在设置时)该值可以在19(最高优先级)到20(最低优先级)之间变化,示例:process。priority19 注意:只有当FPM主进程以root用户身份启动时,它才会工作除非另有规定,否则池进程将继承主进程优先级 daemonize(bool):设置FPM在后台运行。设置no将FPM保持在前台运行用于调试。默认值:yes。示例:daemonizeno 注意:如果是通过dockerfile来启动phpfpm服务,这个就需要设置为no,否则phpfpm无法通过启动容器同时启动(已踩过此坑) rlimitfiles(int):设置master进程打开文件描述符的rlimit数量,可使用ulimitn查看。默认为系统默认值。示例:rlimitfiles1024 rlimitcore:设置核心rlimit最大限制值。可用值:‘unlimited’、0或者正整数。默认值:系统定义值,示例:rlimitcore0 events。mechanism(string):设置FPM使用的事件机制。可用以下选项:select、 pool、epoll、kqueue(BSD)、port(Solaris)。默认值:不设置(自动检测)。示例:events。mechanismepoll systemdinterval(int):使用systemd集成的FPM时,设置间歇秒数,报告健在通知给systemd。设置为0表示禁用。默认值:10。示例:systemdinterval10 2、运行配置 prefix(string):检测路径时使用的前缀。示例:prefixpathtopoolspool user(string):FPM进程运行的Unix用户。必须设置。示例:userapache group(string):FPM进程运行的Unix用户组。如果不设置,就使用默认用户的用户组,示例:groupapache listen(string):设置接受FastCGI请求的地址。可用格式为:ip:port,port,pathtounixsocket。每个进程池都需要设置。示例:listen〔::〕:9000 注意:当webserver与应用服不是同一台(或不是同一个容器时)时,这里不能设置为127。0。0。1:9000,这样时不通的,(已踩坑) listen。backlog(int):设置listen(2)的backlog最大值。1表示无限制。默认值(php7。4):511。示例:listen。backlog511 listen。allowedclients(string):设置允许连接到FastCGI的服务器IPV4地址。等同于PHPFastCGI(5。2。2)中的FCGIWEBSERVERADDRS环境变量。仅对TCP监听起作用。每个地址是用逗号分隔的,如果没有设置或者为空,则允许任何服务器请求连接。默认值:any。PHP5。5。20和5。6。4起,开始支持IPv6地址。示例:listen。allowedclients127。0。0。1,192。168。2。25 listen。ownerlisten。grouplisten。mode(string):如果使用了Unix套接字,表示它的权限。在Linux中必须设置读写权限,以便用于WEB服务器连接。在很多BSD派生的系统中可以忽略权限允许自由连接。默认值:运行所使用的用户和组,权限为0660。示例:listen。owneruserlisten。groupusergrouplisten。mode0660 listen。aclusers(string):当系统支持POSIXACL(AccessControlLists)时,可以设置使用此选项。当设置了的时候,将会忽略listen。owner和listen。group。值是逗号分割的用户名列表。PHP5。6。5起可用。示例:listen。aclusersapache,nginx listen。aclgroups(string):作用和listen。aclusers同理,值是逗号分割的用户组名称列表。PHP5。6。5起可用。listen。aclgroupsapache,nginx pm(string):设置进程管理器如何管理子进程。可用值:static,ondemand,dynamic。必须设置。static子进程的数量是固定的(通过pm。maxchildren)。ondemand进程在有需求时才产生(当请求时才启动。与dynamic相反,在服务启动时pm。startservers就启动了。dynamic子进程的数量在下面配置的基础上动态设置:pm。maxchildren,pm。startservers,pm。minspareservers,pm。maxspareservers。示例:pmdynamic pm。maxchildren(int):pm设置为static时表示创建的子进程的数量,pm设置为dynamic时表示最大可创建的子进程的数量。必须设置。示例:pm。maxchildren30 pm。startservers(int):设置启动时创建的子进程数目。仅在pm设置为dynamic时使用。默认值:minspareservers(maxspareserversminspareservers)2。示例:pm。startservers5 pm。minspareservers(int):设置空闲服务进程的最低数目。仅在pm设置为dynamic时使用。必须设置,示例:pm。minspareservers5 pm。maxspareservers(int):设置空闲服务进程的最大数目。仅在pm设置为dynamic时使用。必须设置,示例:pm。maxspareservers30 pm。processidletimeout(mixd):秒数,多久之后结束空闲进程。仅当设置pm为ondemand。可用单位:s(秒),m(分),h(小时)或者d(天)。默认单位:10s。示例:pm。processidletimeout10s pm。maxrequests(int):设置每个子进程在处理了多少个请求数量之后就重启。如果设置为0则一直接受请求,不重启,等同于PHPFCGIMAXREQUESTS环境变量。默认值:0。示例:pm。maxrequests300 pm。statuspath(string):FPM状态页面的网址。如果没有设置,则无法访问状态页面,默认值:无。示例:pm。statuspathfpmStatus 效果: localhostfpmStatus ping。path(string):FPM监控页面的ping网址。如果没有设置,则无法访问ping页面。该页面用于外部检测FPM是否存活并且可以响应请求。请注意必须以斜线开头();示例:ping。pathfpmping 效果: 访问localhostfpmping响应示例 ping。response(string):用于定义ping请求的响应返回内容。返回为HTTP200的textplain格式文本。默认值:pong。示例:ping。response200 效果: process。priority(int):设置worker的nice(2)优先级(如果设置了的话)。该值从19(最高优先级)到20(更低优先级)。默认值:不设置。示例:process。priority19 access。log(string):Accesslog文件。默认值:不设置access。logvarlogsphpfpm。access。log access。format(string):accesslog的格式。默认值:Rutmrs,示例:access。formatRutmrQqsf{mili}d{kilo}MC slowlog(srting):慢日志文件及路径,示例:slowlogvarlogphpfpmwwwslow。log requestslowlogtimeout(mixed):记录慢日志的请求时间阀值,当一个请求处理时间超出该配置后,会记录到slowlog中。设置为0表示Off。可用单位:s(秒),m(分),h(小时)或者d(天)。默认单位:s(秒)。默认值:0(关闭)。requestslowlogtimeout3s requestterminatetimeout(mixd):设置单个请求的超时中止时间。该选项可能会对php。ini设置中的maxexecutiontime因为某些特殊原因没有中止运行的脚本有用。设置为0表示Off。可用单位:s(秒),m(分),h(小时)或者d(天)。默认单位:s(秒)。默认值:0(关闭)。示例:requestterminatetimeout10s chroot(string):启动时的Chroot目录。所定义的目录需要是绝对路径。如果没有设置,则chroot不被使用。示例:chrootdir chdir(string):设置启动目录,启动时会自动Chdir到该目录。所定义的目录需要是绝对路径。默认值:当前目录,或者根目录(chroot时)。示例:chdirvarwww catchworkersoutput(boolean):重定向运行过程中的stdout和stderr到主要的错误日志文件中。如果没有设置,stdout和stderr将会根据FastCGI的规则被重定向到devnull。默认值:无。示例:catchworkersoutputyes clearenv(boolean):为FPMworker进程清除环境变量。在进程池配置文件里设置环境变量前,阻止任意系统的环境变量进入FPMworker进程。自PHP5。4。27、5。5。11和5。6。0起。默认值:Yes,示例:clearenvyes security。limitextensions(string):限制FPM允许解析的脚本扩展名。此设置可以预防web服务器配置的错误。应当限制FPM仅仅解析。php扩展名,阻止恶意用户使用其他扩展名运行php代码。默认值:。php。phar,示例:security。limitextensions。php