rfc:fpm:ini_syntax
Request for Comments: FPM INI Syntax
- Version: 1.2
- Date: 2010-04-21
- Author: Jérôme Loyet <jerome.at.loyet.dot.net>
- Status: Implemented in PHP 5.3
- First Published at: http://wiki.php.net/rfc/fpm/ini_syntax
This RFC discusses the FPM configuration file syntax and it's replacement from XML to INI.
WE ARE NOT TALKING HERE ABOUT CHANGING SOMETHING INTO main/* or Zend/*. This dicussion is about sapi/fpm ONLY
Introduction
FPM (FastCGI Process Manager) is under discussion for its inclusion into the PHP core distribution. See the RFC.
Until now, FPM uses a XML configuration file. It's been discussed several times with passion:
But it comes that we almost all agree to change it to INI. This RFC propose a INI syntax for FPM.
Requirements
- An include directive to include one or several files at once. This directive can be set everywhere in the configuation files.
- A global section which include global simple directives (pid_file=, ...)
- At least one worker section wich includes:
- specific simple directives (user=, group=, status=, ...)
- specific array directives (environment[PATH]=, php_define[sendmail_path]=, ...)
Implementation
I propose to implement the previous requirements this way:
- The include directive is a simple key/value. The key is named include. The value is a pattern recognized by glob(3). With glob(3), a simple file can be set, but also a bunch of file at once
include=/etc/fpm.d/www.my.site.com.conf include=/etc/fpm.d/*.conf
- The global section can start with an INI section named globals. This INI section is not mandatory if directives are set before any other INI sections.
[globals]
- Simple directive values are simple key/value pairs.
daemonize = yes
- Array directive values are arrays of key/value pairs.
environment[PATH] = /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin php_define[sendmail_path] = /bin/mini_sendmail -t -i -fwww@my.site.com
- Workers starts with a INI section. The value of the section is named with the worker's name. All the following directives are related to this worker until another INI section starts a new worker.
[www.my.site.com]
Yet known directives
Global directives
- daemonize. Set to yes/no. Default to yes. Does FPM run as a standalone daemon or stays in foreground (debugging purpose).
- pid. Set to PID file location.
- error_log. Set to error file location.
- log_level. Set the log_level: notice, warn, error or alert.
- process_control_timeout. Set a time value.
- emergency_restart_interval. Set a time value.
- emergency_restart_threshold. Set a time value.
Worker directives
- user.
- group.
- pm.
- pm.start_servers.
- pm.min_spare_servers.
- pm.max_spare_servers.
- pm.max_children.
- pm.max_requests.
- pm.status_path.
- pm.max_requests.
- listen.address.
- listen.backlog.
- listen.owner.
- listen.group.
- listen.mode.
- listen.allowed_client.
- ping.path.
- ping.response.
- chroot.
- chdir.
- request_terminate_timeout.
- request_slowlog_timeout.
- slowlog.
- rlimit_core.
- rlimit_files.
- catch_worker_output.
- php_value[].
- php_admin_value[].
- php_flag[].
- php_admin_flag[].
- env[].
- include.
Rename directive proposal
In this section, I want to propose to rename some of the yet know directives.
- pm.style to pm. Remove style and keep only pm. It's enough and clearer. It's the main option for the pm subsection.
- pm.dynamic.start_servers to pm.start_servers. As start_servers is only used with dynamic mode, it's not necessary to precise it's dynamic.
- pm.dynamic.min_spare_servers to pm.min_spare_servers. Same as start_servers.
- pm.dynamic.max_spare_servers to pm.max_spare_servers. Same as start_servers.
- status to pm.status_path. The status directive is directly related to PM as it's its status page.
- listen_address to listen.address
- allowed_clients to listen.allowed_clients
- ping and pong to a subsection:
- ping.path to set the ping path request (/ping)
- ping.response to set the response from the previous request
- max_requests to pm.max_requests.. Move this directive to the PM array as it's directly related to PM.
- environment[] to env[]. The short word env is enough to understand and closer to reality (env shell command).
- php_define[] to php_flag[], php_value[], php_admin_flag[], php_admin_value[]. This is the same syntax as the apache sapi.
Examples
Proposal and Patch
- The first version of the patch is available at http://www.fatbsd.com/fpm/fpm-ini-v1.patch. The include function is not YET implemented, so as the reference system which is maybe too complicated.
Changelog
- fat - 2010-03-30 - initial RFC version.
- fat - 2010-04-13 - remove unnecessary use of arrays (for pm, ping and listen) + add examples
- fat - 2010-04-15 - first revision of the patch has been added
- fat - 2010-04-15 - add warning header to explain this RFC is only about sapi/fpm/*
- fat - 2010-04-21 - commit the patch (revision 298281)
rfc/fpm/ini_syntax.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1