PHP FPM: Unterschied zwischen den Versionen
Peh (Diskussion | Beiträge) |
|||
(5 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
= PHP als eigener Prozess = | = PHP als eigener Prozess = | ||
Normalerweise starten PHP-Prozesse im Managed Webspace als FastCGi-Prozess unter Kontrolle des | Normalerweise starten PHP-Prozesse im Managed Webspace als FastCGi-Prozess unter Kontrolle des Apache Webserver. Der Apache übernimmt die Skalierung und startet bei Bedarf weitere Prozesse nach. | ||
Nutzer:innen eines Managed Server können alternativ PHP-FPM Nutzen. Sie starten einen FPM-Prozess unter der eigenen Kontrolle. Dieser Hauptprozess übernimmt die Skalierung und Kontrolliert den Lifecycle von PHP-Prozessen nach den wünschen der Webseitenbetreiber:in. | Nutzer:innen eines Managed Server können alternativ PHP-FPM Nutzen. Sie starten einen FPM-Prozess unter der eigenen Kontrolle. Dieser Hauptprozess übernimmt die Skalierung und Kontrolliert den Lifecycle von PHP-Prozessen nach den wünschen der Webseitenbetreiber:in. | ||
Zeile 16: | Zeile 16: | ||
[www] | [www] | ||
listen = 127.0.0.1: | listen = 127.0.0.1:30080 | ||
listen.allowed_clients = 127.0.0.1 | listen.allowed_clients = 127.0.0.1 | ||
pm = dynamic | pm = dynamic | ||
Zeile 33: | Zeile 33: | ||
$ cat doms/hs-example.de/.htaccess | $ cat doms/hs-example.de/.htaccess | ||
RewriteEngine on | RewriteEngine on | ||
RewriteRule ^(.*)\.php(/.*)? fcgi://127.0.0.1:30080/home | RewriteRule ^(.*)\.php(/.*)?$ fcgi://127.0.0.1:30080/home/doms/hs-example.de/htdocs-ssl/$1.php$2 [proxy,last] | ||
== Start und | == Start und Autostart des FPM-Prozess == | ||
Der Prozess | Der FPM-Prozess wird wie folgt gestartet: | ||
/usr/sbin/php-fpm8.2 --fpm-config php-fpm/php-fpm.conf --php-ini php-fpm/php.ini --nodaemonize | |||
Eine Unit für SystemD könnte wie folgt aussehen: | |||
[Unit] | |||
Description=PHP FPM Service | |||
[Service] | |||
Type=simple | |||
WorkingDirectory=%h | |||
Environment="PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin" | |||
ExecStart=/usr/sbin/php-fpm8.2 --fpm-config %h/php-fpm/php-fpm.conf --php-ini %h/php-fpm/php.ini --nodaemonize | |||
StandardOutput=file:%h/var/php-fpm.log | |||
StandardError=inherit | |||
Restart=always | |||
PrivateTmp=true | |||
[Install] | |||
WantedBy=default.target |
Aktuelle Version vom 5. November 2024, 19:13 Uhr
PHP als eigener Prozess
Normalerweise starten PHP-Prozesse im Managed Webspace als FastCGi-Prozess unter Kontrolle des Apache Webserver. Der Apache übernimmt die Skalierung und startet bei Bedarf weitere Prozesse nach.
Nutzer:innen eines Managed Server können alternativ PHP-FPM Nutzen. Sie starten einen FPM-Prozess unter der eigenen Kontrolle. Dieser Hauptprozess übernimmt die Skalierung und Kontrolliert den Lifecycle von PHP-Prozessen nach den wünschen der Webseitenbetreiber:in.
Konfiguration von FPM
Hier nur ein minimales Beispiel. Für die Optimierung sein auf die entsprechende Originaldokumentation verwiesen.
~/php-fpm$ cat ~/php-fpm/php-fpm.conf [global] pid = /home/pacs/xyz00/users/username/php-fpm/php-fpm.pid error_log = /home/pacs/xyz00/users/username/php-fpm/php-fpm.log [www] listen = 127.0.0.1:30080 listen.allowed_clients = 127.0.0.1 pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 ;pm.process_idle_timeout = 10s; ;pm.max_requests = 500
Apache Konfiguration
Der FPM-Server wird über das Apache Modul "mod_proxy_fcgi" angesteuert. Dazu legt man im Verzeichnis ~/doms/hs-example.de/ eine Datei .htaccess an.
$ cat doms/hs-example.de/.htaccess RewriteEngine on RewriteRule ^(.*)\.php(/.*)?$ fcgi://127.0.0.1:30080/home/doms/hs-example.de/htdocs-ssl/$1.php$2 [proxy,last]
Start und Autostart des FPM-Prozess
Der FPM-Prozess wird wie folgt gestartet:
/usr/sbin/php-fpm8.2 --fpm-config php-fpm/php-fpm.conf --php-ini php-fpm/php.ini --nodaemonize
Eine Unit für SystemD könnte wie folgt aussehen:
[Unit] Description=PHP FPM Service [Service] Type=simple WorkingDirectory=%h Environment="PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin" ExecStart=/usr/sbin/php-fpm8.2 --fpm-config %h/php-fpm/php-fpm.conf --php-ini %h/php-fpm/php.ini --nodaemonize StandardOutput=file:%h/var/php-fpm.log StandardError=inherit Restart=always PrivateTmp=true [Install] WantedBy=default.target