• Plesk - Probleme und Lösungsvorschläge

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.

Information zum Datenschutz | Helfen Sie uns diese Seite zu optimieren und erlauben Sie Cookies - daraus gewonnene Informationen werden nicht an Dritte weitergegeben.
Ablehnen Erlauben