PHP-FPM 配置文件详解

文章目录

  • 说明
  • 一、php-fpm.conf 文件
    • 1.全局配置(Global Options)
    • 2.进程池设置(Pool Definitions)
  • 二、www.conf 文件
    • 1.进程池基本设置+监听设置
    • 2.process(干嘛的?)
    • 3.进程管理器(process manager,简称pm)
    • 4.FPM 运行状态页面(FPM status page)
    • 5.日志和请求
    • 6.其他
  • 总结
    • 1.初次安装时,需要更改或可以关注的配置项
    • 2.到底选择 static 还数 dynamic?
    • 3.慢日志查询
    • 4.nginx 通过 unix sock 与 php-fpm 通信
    • 5.启用 FPM status page
    • 6.backlog 配置问题
    • 7.pm.max_children 与 request_terminate_timeout
    • 8.其他参考内容


说明

系统:macOS 10.14.6
PHP:homebrew 安装的 PHP8.0.20 (fpm-fcgi)

除了有 php-fpm.conf 配置文件外,通常还有其他的 *.conf 配置文件(也可以不要,直接在 php-fpm.conf 配置)用于配置进程池,不同的进程池可以用不同的用户执行,监听不同的端口,处理不同的任务;多个进程池共用一个全局配置。

关于路径问题,原文是这样说的:
All relative paths in this configuration file are relative to PHP’s install prefix (/usr/local/Cellar/[email protected]/8.0.20). This prefix can be dynamically changed by using the ‘-p’ argument from the command line.
“此配置文件中的所有相对路径都相对于 PHP 的安装前缀。 可以使用命令行中的“-p”参数动态更改此前缀。”。
通过 phpinfo() 看到编译参数 ‘–prefix=/usr/local/Cellar/[email protected]/8.0.20’ ‘–localstatedir=/usr/local/var’
所以我的环境下,prefix=/usr/local/Cellar/[email protected]/8.0.20。按照他的说法,如果我使用以下设置:

pid = run/php-fpm.pid
error_log = log/php-fpm.log

那么应该出现以下两个文件
/usr/local/Cellar/[email protected]/8.0.20/run/php-fpm.pid
/usr/local/Cellar/[email protected]/8.0.20/log/php-fpm.log
但实际出现的是以下两个文件
/usr/local/var/run/php-fpm.pid
/usr/local/var/log/php-fpm.log
也就是说这两个指令的相对地址是/usr/local/var(从结果上对应“–localstatedir”)。看原文说明也特别说明了他们的相对地址是 /usr/local/var:

; Pid file
; Note: the default prefix is /usr/local/var
; Default Value: none
pid = run/php-fpm.pid

; Error log file
; If it's set to "syslog", log is sent to syslogd instead of being written
; into a local file.
; Note: the default prefix is /usr/local/var
; Default Value: log/php-fpm.log
error_log = log/php-fpm.log

不明白是上下文为什么会有这种冲突。难道这两个指令是相对于 localstatedir?不管是他的问题还是我理解的问题,涉及的路径的问题,最好还是直接使用完整路径,放在哪了清晰明了。


一、php-fpm.conf 文件

1.全局配置(Global Options)

pid = /usr/local/var/run/php8.0-fpm.pid
#fpm 主进程 pid 存放位置,进程会根据设置自动生成文件

error_log = /usr/local/var/log/php8/php-fpm.log
#错误日志存放位置,设置成本地文件即可,进程会根据设置自动生成文件
#若设置成"syslog",日志将发送给 syslogd。(syslogd 不熟悉可以无视)

针对 error_log = syslog  个人建议有明确需要再来关注这两个指令
;syslog.facility = daemon
#用于说明正在记录消息的程序是什么类型,
#syslogd 可以对不同类型的 facility(设备)信息采取不同的处理方式。
#当前环境默认:daemon(可能是因为我们通常是以守护进程的方式在运行 fpm)以下是可以被
#识别的值:
#kern     内核信息,首先通过 klogd 传递;
#user     用户进程;
#mail     邮件;
#daemon   后台进程;
#authpriv 授权信息;
#syslog   系统日志;
#lpr      打印信息;
#news     新闻组信息;
#uucp     由uucp生成的信息
#cron     计划和任务信息。
#mark     syslog 内部功能用于生成时间戳
#local0----local7   与自定义程序使用,例如使用 local5 做为 ssh 功能
#扩展阅读:https://blog.csdn.net/zyy617532750/article/details/74942090
;syslog.ident = php-fpm
#当启用了多割进程池,这一项负责区分出不同的进程池消息,所有有多个进程池配置时,此项的值应该也不同
#当前环境默认:php-fpm

;log_level = notice
#记录日志的级别:alert、error、warning、notice、debug。当前环境默认:notice

;log_limit = 1024
#单行字符数。如果该行超出限制,则换行。当前环境默认:1024。

;log_buffering = yes   重日志场景关注此项
#google 翻译:日志缓冲指定日志行是否被缓冲,这意味着该行是在单个写入操作中写入的。
#如果值为 false,则数据直接写入文件描述符。这是一个实验性的选项,可以在一些繁重的日志
#记录场景中潜在地提高日志记录性能和内存使用率。如果记录到 syslog,则忽略此选项,
#因为它必须始终被缓冲。
#当前环境默认:yes

;emergency_restart_threshold = 0
;emergency_restart_interval = 0
#表示在 emergency_restart_interval 所设置的时间内(如设置:60s)出现SIGSEGV
#或者SIGB

你可能感兴趣的:(PHP,php,服务器,php-fpm)