Plesk - php-fpm konfiguriert aber weiterhin per fastcgi ausgeführt
Sie möchten einen Plesk-Server unter CentOS 6 wegen folgender Meldungen von fastcgi auf php-fpm umstellen:
[Thu Aug 13 06:19:16 2020] [warn] mod_fcgid: process 15723 graceful kill fail, sending SIGKILL
Wenn diese Meldungen im httpd error_log erscheinen, sind meist die fcgi Kapazitäten erschöpft und der ganze Webserver reagiert für mehrere Minuten nicht mehr. Falls Sie die Standardwerte noch nicht erhöht haben, können Sie diese in /etc/httpd/conf.d/fcgid.conf anpassen und den Webserver danach neu starten:
FcgidIdleTimeout 300 FcgidProcessLifeTime 300 FcgidMaxProcesses 150 FcgidMaxProcessesPerClass 100 FcgidMinProcessesPerClass 0 FcgidConnectTimeout 30 FcgidIOTimeout 300 FcgidInitialEnv RAILS_ENV production FcgidIdleScanInterval 10
Die beste Lösung wäre alle Webs auf php-fpm umzustellen und den Apache anzuweisen die entsprechenden Anfragen direkt über das integrierte Proxy-Modul weiterzuleiten. Dazu gibt es zwei Möglichkeiten: TCP-Sockets und Unix-Domain-Sockets, z.B.:
<FilesMatch "\.php$"> SetHandler "proxy:unix:/path/to/app.sock|fcgi://localhost/" </FilesMatch>
Plesk verwendet die Variante mit den Unix-Sockets und kann php-fpm unter CentOS 6 deshalb nicht direkt über den Apache bedienen, da dort zwar die Variante mit den TCP-Sockets funktioniert, Unix-Sockets aber erst ab Version 2.4.10 im Apache Proxymodul unterstützt werden. In neueren Versionen installiert Plesk zusätzlich den Nginx-Webserver, der php-fpm direkt anbinden kann und weitere requests transparent an den Apache durchreicht.
Prinzipiell kann man also einen Webspace in Kombination mit Nginx unter CentOS 6 über php-fpm anbinden, allerdings hat diese Variante auch Nachteile:
- nginx kennt keine .htaccess Dateien. Es sind zwar Umleitungen ähnlich wie bei mod_rewrite möglich, allerdings müssen diese direkt in die nginx Konfiguration übernommen werden
- werden die PHP-Dateien von nginx nicht erkannt, z.B. weil die .php-Endung fehlt, werden sie weiterhin über den Apache via fastcgi ausgeführt
Lösungsvorschläge
Überprüfen Sie mit plesk bin php_handler ob die gewünschte PHP-Version verfügbar ist:
[root@server ~]# plesk bin php_handler --list id: display name: full version: version: type: cgi-bin: php-cli: php.ini: custom: status: cgi 5.3.3 by OS vendor 5.4.45 5.4 cgi /usr/bin/php-cgi /usr/bin/php /etc/php.ini false disabled fastcgi 5.4.45 5.4.45 5.4 fastcgi /usr/bin/php-cgi /usr/bin/php /etc/php.ini false enabled fpm 5.3.3 by OS vendor 5.4.45 5.4 fpm /usr/sbin/php-fpm /usr/bin/php /etc/php.ini false enabled module 5.4.45 5.4.45 5.4 module /usr/bin/php-cgi /usr/bin/php /etc/php.ini false disabled plesk-php72-cgi 7.2.32 7.2.32 7.2 cgi /opt/plesk/php/7.2/bin/php-cgi /opt/plesk/php/7.2/bin/php /opt/plesk/php/7.2/etc/php.ini true disabled plesk-php72-fastcgi 7.2.32 7.2.32 7.2 fastcgi /opt/plesk/php/7.2/bin/php-cgi /opt/plesk/php/7.2/bin/php /opt/plesk/php/7.2/etc/php.ini true enabled plesk-php72-fpm 7.2.32 7.2.32 7.2 fpm /opt/plesk/php/7.2/sbin/php-fpm /opt/plesk/php/7.2/bin/php /opt/plesk/php/7.2/etc/php.ini true enabled
Überprüfen Sie mit plesk db wie der Webspace konfiguriert ist:
mysql> select * from domains where name='kundendomain.de'; +-----+------------+------------------+------------------+-------------+--------+---------+-----------+-------+-------------+-----------+-----------+--------------------------------------+---------+-----------+-------------+----------------+-----------------+----------------+-------------+------------------+---------------------+-------------+-----------+-----------+-----------+ | id | cr_date | name | displayName | dns_zone_id | status | htype | real_size | cl_id | cert_rep_id | limits_id | params_id | guid | overuse | vendor_id | webspace_id | parentDomainId | webspace_status | permissions_id | external_id | adminDescription | resellerDescription | description | gl_filter | icpStatus | icpPermit | +-----+------------+------------------+------------------+-------------+--------+---------+-----------+-------+-------------+-----------+-----------+--------------------------------------+---------+-----------+-------------+----------------+-----------------+----------------+-------------+------------------+---------------------+-------------+-----------+-----------+-----------+ | 593 | 2018-11-19 | kundendomain.de | kundendomain.de | 670 | 0 | vrt_hst | 171896832 | 366 | 165 | 0 | 0 | 9c244582-d0ea-4f81-9543-d741497a592c | false | 1 | 0 | 0 | 0 | 0 | | | | | on | 0 | NULL | +-----+------------+------------------+------------------+-------------+--------+---------+-----------+-------+-------------+-----------+-----------+--------------------------------------+---------+-----------+-------------+----------------+-----------------+----------------+-------------+------------------+---------------------+-------------+-----------+-----------+-----------+ 1 row in set (0.00 sec) mysql> select * from hosting where dom_id=593; +--------+-------------+--------------+-------+----------+------+-----------+---------------------+------+-------+--------+-------+-------------+-------------------------+------+-----------+------------+--------------+-------------------------------------------+-----------+----------------+-------------------+----------------+---------+----------+-------------+ | dom_id | sys_user_id | real_traffic | ssi | ssi_html | php | php_isapi | php_handler_id | cgi | perl | python | asp | asp_dot_net | managed_runtime_version | ssl | webstat | at_domains | write_modify | www_root | webdeploy | certificate_id | traffic_bandwidth | max_connection | fastcgi | same_ssl | sslRedirect | +--------+-------------+--------------+-------+----------+------+-----------+---------------------+------+-------+--------+-------+-------------+-------------------------+------+-----------+------------+--------------+-------------------------------------------+-----------+----------------+-------------------+----------------+---------+----------+-------------+ | 593 | 485 | 0 | false | false | true | false | plesk-php72-fastcgi | true | false | false | false | false | | true | webalizer | false | NULL | /var/www/vhosts/kundendomain.de/httpdocs | false | 319 | -1 | -1 | true | true | false | +--------+-------------+--------------+-------+----------+------+-----------+---------------------+------+-------+--------+-------+-------------+-------------------------+------+-----------+------------+--------------+-------------------------------------------+-----------+----------------+-------------------+----------------+---------+----------+-------------+ 1 row in set (0.00 sec)
Stellen Sie als PHP-Handler die gewünschte fpm-Variante ein:
[root@server ~]# plesk bin domain --update kundendomain.de -php_handler_id plesk-php72-fpm PHP-FPM cannot work with Apache on this operating system. To use PHP-FPM with nginx, set the option nginx-serve-php to "true".
Hier war die Option nginx-serve-php auf false gesetzt, was bedeutet dass der Apache php-fpm selbst ausliefert. Dies wäre die favorisierte Variante, ist jedoch erst ab Apache 2.4.10 möglich und funktioniert deshalb unter CentOS 6 nicht.
Konfigurieren Sie deshalb, dass php-fpm von Nginx ausgeliefert wird statt von Apache:
[root@server ~]# plesk bin domain --update kundendomain.de -nginx-serve-php true SUCCESS: Update of domain 'kundendomain.de' completed.
Stellen Sie sicher, das die Proxy-Funktion in Nginx eingerichtet ist und alle anderen Anfragen an den Apache weitergereicht werden:
[root@server ~]# plesk bin domain --update kundendomain.de -nginx-proxy-mode true SUCCESS: Update of domain 'kundendomain.de' completed.
Passen Sie gegebenenfalls Ihre Subscriptions an:
[root@server ~]# plesk bin subscription --update-web-server-settings kundendomain.de -nginx-serve-php true [root@server ~]# plesk bin subscription --update kundendomain.de -php_handler_id plesk-php72-fpm SUCCESS: Update of domain 'kundendomain.de' completed.
Sollten weiterhin Probleme auftreten könnten Sie das Web auf einen neueren Pleskserver migrieren. CentOS 8 liefert Apache 2.4.37 mit, CentOS 7 dagegen nur 2.4.6 - der Apache Proxy kann wie beschrieben erst ab Version 2.4.10 mit Unix-Domain-Sockets umgehen.