Konfiguration

FPM verwendet die php.ini Syntax für die Konfigurationsdatei - php-fpm.conf, und Pool-Konfigurationsdateien.

Liste globaler php-fpm.conf Direktiven

pid string

Pfad zur PID Datei. Standardwert: none.

error_log string

Pfad zur error log Datei. Standardwert: #INSTALL_PREFIX#/log/php-fpm.log. Ist der Wert "syslog", wird das Log an syslogd gesendet anstatt in eine lokale Datei geschrieben zu werden.

log_level string

Error log level. Mögliche Werte: alert, error, warning, notice, debug. Standardwert: notice.

log_limit int

Obergrenze für die protokollierten Zeilen, die es ermöglicht Nachrichten, die länger als 1024 Zeichen sind, ohne Zeilenumbruch zu protokollieren. Standardwert: 1024. Verfügbar von PHP 7.3.0 an.

log_buffering bool

Experimentelles Protokollieren ohne zusätzliche Pufferung. Standardwert: yes. Verfügbar von PHP 7.3.0 an.

syslog.facility string

Wird verwendet, um anzugeben, welche Art von Programm die Nachricht protokolliert. Standardwert: daemon.

syslog.ident string

Wird jeder Nachricht vorangestellt. Werden mehrere FPM-Instanzen auf dem selben Server ausgeführt, können Sie den Standardwert so ändern, dass er den gemeinsamen Bedürfnissen entspricht. Standardwert: php-fpm.

emergency_restart_threshold int

Wenn diese Anzahl an Kindprozessen mit SIGSEGV oder SIGBUS terminiert, innerhalb des durch emergency_restart_interval gesetzten Zeitintervals, dann wird FPM neu starten. Der Wert 0 meint 'Off'. Standardwert: 0 (Off).

emergency_restart_interval mixed

Zeitinterval, dass von emergency_restart_interval verwendet wird, um zu bestimmen, wann ein zeitversetzter Neustart ausgelöst werden soll. Das kann als Workaround bei zufälligen Fehlern im Shared Memory eines Accelerators nützlich sein. Verfügbare Einheiten: s(econds), m(inutes), h(ours), oder d(ays). Standardeinheit: seconds. Standardwert: 0 (Off).

process_control_timeout mixed

Zeitlimit der Kindprozesse, um auf eine Reaktion vom Master zu warten. Verfügbare Einheiten: s(econds), m(inutes), h(ours), oder d(ays) Standardeinheit: seconds. Standardwert: 0.

process.max int

Die Höchstanzahl von Prozessen, die FPM forken wird. Dies wurde konzipiert, um die globale Prozessanzahl zu kontrollieren, wenn dynamisches PM in vielen Pools verwendet wird. Mit Vorsicht zu verwenden. Standardwert: 0.

process.priority int

Gibt die auf den Master-Prozess (wenn festgelegt) anzuwendende nice(2) Priorität an. Der Wert kann zwischen -19 (höchste Priorität) und 20 (niedrigere Priorität) liegen. Standardwert: nicht gesetzt.

daemonize bool

Schickt FPM in den Hintergrund. Setze 'no', um FPM im Vordergrund zu halten und zu debuggen. Standardwert: yes.

rlimit_files int

Setzt das Ressourcenlimit (rlimit) der offenen Datei-Deskiptoren für den Master-Prozess. Standardwert: Setzt die Ressourcengrenze (rlimit) der offenen Datei-Deskiptoren für den Master-Prozess.

rlimit_core int

Setzt das Ressourcenlimit (rlimit) der Maximalgröße einer Core-Datei für den Master-Prozess. Standardwert: 0.

events.mechanism string

Spezifiziert den Ereignismechanismus den FPM verwendet. Die folgenden sind möglich: select, poll, epoll, kqueue (*BSD), port (Solaris). Standardwert: leer (Auto-Erkennung).

systemd_interval int

Wenn FPM mit systemd Integration kompiliert wurde, gibt dies das Intervall in Sekunden an, in dem Statusberichtsmeldungen an systemd gesendet werden. 0 deaktiviert dies. Standardwert: 10.

Liste der Pool Direktiven

Mit FPM sind mehrere Pools an Prozessen mit unterschiedlichen Einstellungen lauffähig. Nachfolgend finden Sie die Einstellungen die pro Pool verändert werden können.

listen string

Die Adresse, unter welcher FastCGI-Anfragen angenommen werden. Gültig ist die Syntax: 'ip.add.re.ss:port', 'port', '/path/to/unix/socket'. Diese Einstellunge ist für jeden Pool zwingend notwendig.

listen.backlog int

Setzt listen(2) backlog. Der Wert '-1' meint unbegrenzt. Standardwert: -1.

listen.allowed_clients string

Liste mit IPv4 Adressen von FastCGI Clients, denen eine Verbindung gestattet ist. Gleichzusetzen mit der FCGI_WEB_SERVER_ADDRS Umgebungsvariable im originalen PHP FastCGI (5.2.2+). Macht nur Sinn mit einem empfangenden TCP Socket. Die Adressen sind durch Komma zu trennen. Wenn der Wert leer gelassen wird, dann werden Verbindungen von beliebigen IP Adressen akzeptiert. Standardwert: any. IPv6 Adressen sind seit PHP 5.5.20 und 5.6.4 erlaubt.

listen.owner string

Setzt die Rechte für den Unix Socket, falls dieser verwendet wird. Unter Linux müssen Lese- und Schreibrechte gesetzt werden, um Verbindungen eines Webservers zu erlauben. Viele BSD-Derivate erlauben Verbindungen unabhängig von den Rechteeinstellungen. Standardwert: user und group werden auf den aktuellen User gesetzt und Mode auf 0660.

listen.group string

Siehe listen.owner.

listen.mode string

Siehe listen.owner.

listen.acl_users string

Wenn POSIX Zugriffskontrolllisten unterstützt werden, können Sie diese mit dieser Option einstellen. Wenn eingestellt, dann werden listen.owner und listen.group ignoriert. Der Wert ist eine durch Kommas getrennte Liste von Benutzernamen. Seit PHP 5.6.5.

listen.acl_groups string

Siehe listen.acl_users. Der Wert ist eine durch Kommas getrennte Liste von Gruppennamen. Seit PHP 5.6.5.

user string

Der Unix-Benutzer der FPM Prozesse. Diese Einstellung ist zwingend notwendig.

group string

Die Unix-Benutzergruppe der FPM Prozesse. Wenn nicht eingestellt, wird als Wert die Gruppe des Standard-Nutzers verwendet.

pm string

Wähle, wie der Prozess-Manager die Anzahl der Kindprozesse verwaltet. Mögliche Werte: static, ondemand, dynamic. Diese Einstellung ist zwingend notwendig.

static - die Anzahl der Kindprozesse ist fest eingestellt (pm.max_children).

ondemand - die Kindprozesse werden gestartet, sobald sie benötigt werden, im Gegensatz zu dynamic, wo zu Beginn bereits pm.start_servers Prozesse gestartet werden.

dynamic - die Anzahl der Kindprozesse wird dynamisch eingestellt, wobei die folgenden Einstellungen zugrundegelegt werden: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.

pm.max_children int

Die Anzahl an Kindprozessen, die erstellt werden, wenn pm auf static gesetzt und die maximale Anzahl an Kindprozessen, die erstellt werden, wenn pm auf dynamic gesetzt ist. Diese Einstellung ist zwingend notwendig.

Die Einstellung setzt das Limit für die Anzahl gleichzeitiger Verbindungen. Gleichzusetzen mit der ApacheMaxClients-Direktive mit mpm_prefork und der PHP_FCGI_CHILDREN Umgebungsvariable im originalen PHP FastCGI.

pm.start_servers int

Die Anzahl an Kindprozessen, die beim Start erstellt werden. Wird nur verwendet, wenn pm auf dynamic gesetzt ist. Standardwert: min_spare_servers + (max_spare_servers - min_spare_servers) / 2.

pm.min_spare_servers int

Die gewünschte Mindestanzahl an Prozessen. Wird nur genutzt, wenn pm auf dynamic gesetzt ist. Ebenfalls zwingend notwendig.

pm.max_spare_servers int

Die gewünschte Maximalanzahl an Prozessen. Wird nur genutzt, wenn pm auf dynamic gesetzt ist. Ebenfalls zwingend erforderlich.

pm.process_idle_timeout mixed

Die Anzahl von Sekunden nach der ein Prozess im Leerlauf terminiert wird. Wird nur verwendet, wenn pm auf ondemand gesetzt wurde. Verfügbare Einheiten: s (Sekunden)(Standardwert), m (Minuten), h (Stunden) oder d (Tage). Standardwert: 10s.

pm.max_requests int

Die Anzahl an Anfragen, die ein Kindprozesse ausführt, bevor er neu startet. Das kann hilfreich sein, um Memory Leaks in Bibliotheken von Drittanbietern zu debuggen. Für eine unbegrenzte Anfrageanzahl '0' verwenden. Vergleichbar mit PHP_FCGI_MAX_REQUESTS. Standardwert: 0.

pm.status_path string

Die URI, um die FPM Statusseite anzuzeigen. Wenn dieser Wert nicht gesetzt ist, wird kein URI als Statusseite erkannt. Standardwert: none.

ping.path string

Die Ping URI, um die Monitoring-Seite von FPM aufzurufen. Wenn dieser Wert nicht gesetzt ist, dann wird keine URI als Ping-Seite erkannt. Das kann dafür verwendet werden, zu testen, ob FPM noch läuft und antwortet. Es sei der Hinweis gestattet, dass der Wert mit einem Forwardslash (/) zu beginnen hat.

ping.response string

Diese Direktive kann dazu verwendet werden, die Antwort auf eine Ping-Anfrage zu gestalten. Die Antwort ist vom Typ text/plain mit Antwortcode 200. Standardwert: pong.

process.priority int

Legt die nice(2) Priorität fest, die auf den Arbeiterprozess angewendet wird (falls angegeben). Der Wert liegt im Bereich von -19 (höchste Priorität) bis 20 (niedrigste Priorität). Standardwert: nicht gesetzt

process.dumpable bool

Setzt das „process dumpable flag“ (PR_SET_DUMPABLE prctl), selbst wenn der Prozess-Nutzer oder die -Gruppe sich vom Master-Prozess-Nutzer unterscheidet. Dies erlaubt es dem Pool-Nutzer, Prozess-Coredumps zu erstellen, und den Prozess mit ptrace zu untersuchen. Standardwert: no. Seit PHP 7.0.29, 7.1.17 und 7.2.5.

prefix string

Legt das Prefix für die Pfad-Validierung fest.

request_terminate_timeout mixed

Das Zeitfenster, in dem die einzelne Anfrage beantwortet sein sollte und falls nicht, der bearbeitende Prozess terminiert wird. Diese Einstellung sollte verwendet werden, wenn die 'max_execution_time' php.ini Einstellung, aus irgendeinem Grund nicht zu einem Scriptabbruch führt.Der Wert '0' steht für 'Off'. Mögliche Einheiten: s(econds)(default), m(inutes), h(ours) oder d(ays). Standardwert: 0.

request_slowlog_timeout mixed

Das Zeitfenster, in dem die einzelne Anfrage beantwortet sein sollte und falls nicht, ein PHP Backtrace in die Log-Datei für langsame Anfragen geschrieben wird. Der Wert '0' meint 'Off'. Mögliche Einheiten: s(econds)(default), m(inutes), h(ours) oder d(ays). Standardwert: 0.

slowlog string

Die Log-Datei für langsame Anfragen. Standardwert: #INSTALL_PREFIX#/log/php-fpm.log.slow.

rlimit_files int

Setzt open file descriptor rlimit für Kind-Prozesse in diesem Pool. Standardwert: Systemeinstellung.

rlimit_core int

Setzt max core size rlimit für Kind-Prozesse in diesem Pool. Mögliche Werte: 'unlimited' oder ein Integer größer oder gleich 0. Standardwert: Systemeinstellung.

chroot string

Wechselt (chroot) beim Start in das angegebene Verzeichnis. Der Wert muss eine absolute Pfadangabe sein. Wenn dieser Wert nicht gesetzt ist, wird chroot nicht verwendet.

chdir string

Wechselt (chdir) beim Start in das angegebene Verzeichnis. Der Wert muss eine absolute Pfadangabe sein. Standardwert: aktuelles Verzeichnis oder / wenn chroot.

catch_workers_output bool

Umleitung von Stdout und Stderr in das allgemeine Errorlog. Wenn nicht gesetzt, werden Stdout und Stderr umgeleitet nach /dev/null, entsprechend der FastCGI Spezifikation. Standardwert: no.

decorate_workers_output bool

Aktiviert die Ausgabedekoration für die Ausgabe von Workern, wenn catch_workers_output aktiviert ist. Standardwert: yes. Verfügbar von PHP 7.3.0 an.

clear_env bool

Löscht die Umgebung in FPM-Arbeitern. Verhindert, dass beliebige Umgebungsvariablen FPM-Arbeiterprozesse erreichen, indem die Umgebung in den Arbeitern gelöscht wird, bevor die Umgebungsvariablen, die in dieser Pool-Konfiguration angegeben sind, hinzugefügt werden. Seit PHP 5.4.27, 5.5.11, and 5.6.0. Standardwert: Yes.

security.limit_extensions string

Beschränkt die Dateirweiterungen des Haupt-Skripts, das FPM zu parsen erlaubt. Dies kann Konfigurationsfehler auf der Webserverseite verhindern. Sie sollten FPM nur auf .php Erweiterungen beschränken, um zu verhindern, dass bösartige Nutzter andere Erweiterungen verwenden, um PHP Code auszuführen. Standardwert: .php .phar

access.log string

Die Zugriffsprotokolldatei. Standardwert: nicht gesetzt

access.format string

Das Zugriffsprotokollformat. Standardwert: "%R - %u %t \"%m %r\" %s"

Es ist möglich, zusätzliche Umgebungsvariablen zu setzen und PHP Einstellungen eines bestimmten Pools zu verändern. Dazu sind die nachfolgenden Einstellungen in der Pool-Konfigurationsdatei erforderlich.

Beispiel #1 Übergabe von Umgebungsvariablen und PHP Einstellungen an einen Pool

env[HOSTNAME] = $HOSTNAME
     env[PATH] = /usr/local/bin:/usr/bin:/bin
     env[TMP] = /tmp
     env[TMPDIR] = /tmp
     env[TEMP] = /tmp
     
     php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
     php_flag[display_errors] = off
     php_admin_value[error_log] = /var/log/fpm-php.www.log
     php_admin_flag[log_errors] = on
     php_admin_value[memory_limit] = 32M
PHP Einstellungen die mit php_value oder php_flag übergeben wurden überschreiben vorherige Werte. Es sei der Hinweis gestattet, dass disable_functions oder disable_classes nicht dazu führt, dass vorher definierte php.ini Einstellungen überschrieben werden, vielmehr werden die neuen Werte angehängt.

Einstellungen die mit php_admin_value und php_admin_flag gemacht wurden, können nicht durch Verwendung von ini_set() verändert werden.

Ab PHP 5.3.3 können PHP-Einstellungen ebenfalls im Webserver vorgenommen werden.

Beispiel #2 Festlegen von PHP-Einstellungen in nginx.conf

set $php_value "pcre.backtrack_limit=424242";
set $php_value "$php_value \n pcre.recursion_limit=99999";
fastcgi_param  PHP_VALUE $php_value;

fastcgi_param  PHP_ADMIN_VALUE "open_basedir=/var/www/htdocs";
Achtung

Weil diese Einstellungen an php-fpm als FastCGI Header übergeben werden, sollte php-fpm nicht an eine öffentlich zugängliche Adresse gebunden sein. Andernfalls könnte jeder die PHP Konfigurationsoptionen ändern. Siehe auch listen.allowed_clients.

add a note add a note

User Contributed Notes 10 notes

up
18
ikrabbe
6 years ago
It seems there is no way to get informed about the access log format codes that are used or can be used. All I found is the source code.

It would really help, not to have open questions when deploying php-fpm. I constantly struggle with file paths for example, but that is another topic.

                                case '%': /* '%' */
                                case 'C': /* %CPU */
                                case 'd': /* duration µs */
                                case 'e': /* fastcgi env  */
                                case 'f': /* script */
                                case 'l': /* content length */
                                case 'm': /* method */
                                case 'M': /* memory */
                                case 'n': /* pool name */
                                case 'o': /* header output  */
                                case 'p': /* PID */
                                case 'P': /* PID */
                                case 'q': /* query_string */
                                case 'Q': /* '?' */
                                case 'r': /* request URI */
                                case 'R': /* remote IP address */
                                case 's': /* status */
                                case 'T':
                                case 't': /* time */
                                case 'u': /* remote user */
up
19
gadnet at aqueos dot com
9 years ago
the doc is lacking a lot of things it seems.

  The php fpm exemple config file indicate different thing, more option etc... I wonder why the main documentation is less verbose that the configuration file that user can have .. or not have ?
up
8
frederic at juliana-multimedia dot com
5 years ago
With Apache, mod_proxy_fcgi and php-fpm, if you want to have a generic pool and several vhost with different php configuration, you can use the ProxyFCGISetEnvIf directive and the PHP_ADMIN_VALUE environment variable. It does not work with PHP_ADMIN_FLAG even for boolean directives.

PHP directives must be separated by spaces and a \n.

ProxyFCGISetEnvIf "true" PHP_ADMIN_VALUE "open_basedir=/var/www/toto/:/tmp/ \n session.save_path=/var/www/toto/session \n display_errors=On \n error_reporting=-1"
up
9
Frank DENIS
12 years ago
The default value for listen.backlog isn't exactly "unlimited".

It's 128 on some operating systems, and -1 (which doesn't mean "unlimited" as well, but is an alias to a hard limit) on other systems.

Check for a sysctl value like kern.somaxconn (OpenBSD) or net.core.somaxconn (Linux).

Crank it up if you need more PHP workers than the default value. Then adjust listen.backlog in your php-fpm configuration file to the same value.

-Frank.
up
1
rob at librobert dot net
3 years ago
Correction for my previous note...

I wrote "The 'index' directive that is used in php-fpm.conf".

But obviously I meant "The 'include' directive"...
up
1
rob at librobert dot net
3 years ago
The 'index' directive that is used in php-fpm.conf is not documented here. However, this directive can also be used in the pool configurations. In the included file, the $pool variable is substituted correctly.

This means that, if you have multiple pools with similar configurations, you can create a file 'default-values.inc' like so:

-----
listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = X
pm.min_spare_servers = X
pm.max_spare_servers = X

access.log = /var/log/php-fpm/$pool.access
access.format = "%R %u [%t] \"%m %r\" %s %d %l"
slowlog = /var/log/php-fpm/$pool.slow

php_flag[short_open_tag] = off
-----

And then include that file in each pool configuration like so:

-----
[vhost1.example.com]
user = www-vhost1
group = www-vhost1

listen = 127.0.0.1:9001

include = /usr/local/etc/php-fpm.d/default-values.inc
-----

This makes things a bit more transparent, and it could potentially save some time if you decide to change settings.

Make sure the name of the included file does not end in '.conf', because all files with that extension are loaded from php-fpm.conf.
up
1
david dot cancalon at proxeem dot fr
3 years ago
Be very carrefull when using ProxyFCGISetEnvIf within a Apache virtual host configuration using a shared PHP-FPM pool. Values defined like this are shared across all the Apache virtual hosts within a pool worker, may resulting in strange behaviours depending on the requests chronology.

See full explanation here:
https://serverfault.com/questions/817020/stop-reusing-php-value-for-different-sites-with-php-fpm/817905#817905
up
-3
Yousef Ismaeil Cliprz
10 years ago
Check if fastCGI enabled

<?php
// You can use isset or is_null for $_SERVER['FCGI_SERVER_VERSION']
function isFastCGI () {
    return !
is_null($_SERVER['FCGI_SERVER_VERSION']);
}

?>
up
-8
sroussey at gmail dot com
11 years ago
Starting in 5.3.9 the security.limit_extensions configuration item has been added and it defaults to .php. If you need to execute other extensions, you have to change this setting.
up
-14
mb
9 years ago
If you need to disable security.limit_extensions variable, simply set the variable to FALSE like so:

security.limit_extensions = FALSE
To Top