Dieses Problem ist stark von der Konfiguration des jeweiligen Webservers abhängig, allgemein kann man leider wenig dazu sagen.
In meinem Fall lag das Problem an der PHP-FPM-Konfiguration. Ich habe einen RS 2000 bei netcup gemietet.
Als Verwaltungstool verwende ich das vorinstallierte Froxlor. Dort scheinen die PHP-FPM-Einstellungen unter "PHP-Konfigurationen" von Haus aus ungenügend zu sein:
Standardeinstellungen:
pm = static (Prozess Manager Control (PM))
pm.max_children = 1 (Anzahl der Kind-Prozesse:)
pm.max_requests = 0 (Requests pro Kindprozess bevor Neuerstellung (respawning))
Ich habe mit dem curl error 28 (timeout) über Wochen verteilt gekämpft, auch mit unerwarteten "503 Service Unavailable"-Fehlern (die auch mit PHP-FPM zu tun hatten).
Der Loopback war auf diesem Server von Haus aus aktiv. Getestet via curl http://www.website-am-gleichen-server.com. Der Befehl wird in der Shell problemlos ohne Timeout ausgeführt.
Wenn ich allerdings (auch via dem Wordpress-Health-Check) den curl über Wordpress (und phpcurl) aufgerufen habe, kam der Timeout-Fehler.
Nächster Schritt war, ein eigenes - unabhängig von Wordpress - curl-php-Loopback-Script aus dem Webspace heraus zu testen. Auch da kam der Timeout-Fehler, ich habe dann versuchsweise die Timout-Zeit erhöht.
Aufmerksam geworden bin ich dann, als ich - während der curl auf die Beendingung der Timeout-Zeit gewartet hat - in einem anderen Tab auf der Website surfen wollte. Ging nicht - da eben nur ein PHP-FPM-Kind-Prozess erlaubt war - der mit dem curl-Request zu tun hatte. Erst als der curl-Request mit einem Timeout beendet wurde konnte ich wieder surfen. Daher kamen wohl auch die 503-Fehler (das werde ich aber noch weiter beobachten müssen).
Meine neuen Einstellungen für PHP-FPM in froxlor:
pm = static
(scheint ok zu sein, siehe https://www.kinamo.be/en/suppo…sses-for-php-fpm-on-nginx und https://haydenjames.io/php-fpm…m-static-max-performance/)
pm.max_children = 10 (Anzahl der Kind-Prozesse:)
pm.max_requests = 200 (Requests pro Kindprozess bevor Neuerstellung (respawning))
Der curl error 28 (timeout) ist sofort verschwunden, keine REST-API oder Loopback-Fehlermeldungen in WordPress, Dateien lassen sich wieder mit dem integrierten Editor bearbeiten und speichern (Fehlermeldung "Kommunikation mit der Website, um auf fatale Fehler zu prüfen, nicht möglich, daher wurde die PHP-Änderung rückgängig gemacht. Du wirst deine veränderte PHP-Datei mit anderen Mitteln hochladen müssen, wie per SFTP".
Die neuen Werte für pm.max_children und pm.max_requests habe ich (noch) nicht anhand der Infos in den Links berechnet. Die Informationen in den Links zeigen ja auch, dass diese Werte u.U. im Betrieb laufend angepasst werden müssen.
PHP-FPM ist eine Art Proxy, der mit dem Apache-Server zusammenarbeitet - das erfordert zusätzliche Konfigurationsarbeit. Nicht so wie bei mod_php, das als in Apache integriertes Modul arbeitet.