Zum Inhalt springen

Apache/HTTP/MPM/Event: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
Zeile 2: Zeile 2:


== Beschreibung ==
== Beschreibung ==
Der Apache-HTTP-Webserver wurde im Laufe der Jahre weiterentwickelt, damit er in verschiedenen Umgebungen arbeitet und verschiedene Anforderungen erfüllt. Ein wichtiges Problem, das Apache HTTP wie jeder andere Webserver auch lösen muss, ist die Handhabung verschiedener Prozesse bei der Bearbeitung von http-basierten Anfragen. Dazu zählt das Öffnen eines Sockets, das die Anforderung verarbeitet, das Offenhalten der Verbindung für eine bestimmte Zeit, die Handhabung neuer Ereignisse, die während dieser Verbindung eintreten und die Rückgabe des produzierten Contents durch ein Programm, dass in einer bestimmten Sprache geschrieben wurde (wie PHP, Perl oder Python). Diese Aufgaben werden von einem ''Multi-Processing-Module'' (MPM) ausgeführt und gesteuert.
Der Apache-HTTP-Webserver wurde im Laufe der Jahre weiterentwickelt, damit er in verschiedenen Umgebungen arbeitet und verschiedene Anforderungen erfüllt
* Ein wichtiges Problem, das Apache HTTP wie jeder andere Webserver auch lösen muss, ist die Handhabung verschiedener Prozesse bei der Bearbeitung von http-basierten Anfragen
* Dazu zählt das Öffnen eines Sockets, das die Anforderung verarbeitet, das Offenhalten der Verbindung für eine bestimmte Zeit, die Handhabung neuer Ereignisse, die während dieser Verbindung eintreten und die Rückgabe des produzierten Contents durch ein Programm, dass in einer bestimmten Sprache geschrieben wurde (wie PHP, Perl oder Python)
* Diese Aufgaben werden von einem ''Multi-Processing-Module'' (MPM) ausgeführt und gesteuert


=== Multi-Processing-Module (MPMs) ===
=== Multi-Processing-Module (MPMs) ===
Apache HTTP ist mit drei verschiedenen MPM ausgestattet
Apache HTTP ist mit drei verschiedenen MPM ausgestattet
; Prefork
; Prefork
Für jede eingehende Verbindung, die den Server erreicht, wird ein neuer Vorgang erstellt. Jeder Vorgang ist isoliert von den anderen und es wird kein Speicher zwischen ihnen geteilt, selbst dann, wenn sie in der Ausführung identische Anrufe an einem bestimmten Punkt ausführen. Auf diese Weise können Sie mit Bibliotheken verknüpfte Anwendungen, die Thread-Ausführungen nicht unterstützen, sicher ausführen - meist ältere Anwendungen oder Bibliotheken.
Für jede eingehende Verbindung, die den Server erreicht, wird ein neuer Vorgang erstellt
* Jeder Vorgang ist isoliert von den anderen und es wird kein Speicher zwischen ihnen geteilt, selbst dann, wenn sie in der Ausführung identische Anrufe an einem bestimmten Punkt ausführen
* Auf diese Weise können Sie mit Bibliotheken verknüpfte Anwendungen, die Thread-Ausführungen nicht unterstützen, sicher ausführen - meist ältere Anwendungen oder Bibliotheken


; Worker
; Worker
Ein Elternprozess ist für das Starten eines Bündels von Kindprozessen verantwortlich, von denen einige neu eingehende Verbindungen erfassen und andere den angeforderten Content bereitstellen. Für jeden Prozess gibt es einen dazugehörigen Thread (ein einzelner Thread kann jeweils eine Verbindung verwalten), sodass ein Prozess mit mehreren Anfragen gleichzeitig umgehen kann. Diese Methode für die Handhabung von Verbindungen fördert eine bessere Ressourcennutzung und gewährleistet die Aufrechterhaltung der Stabilität. Das ist auf das Bündel von verfügbaren Prozessen zurückzuführen, bei denen oft frei verfügbare Threads bereitstehen, die neue Verbindungen sofort bedienen können.
Ein Elternprozess ist für das Starten eines Bündels von Kindprozessen verantwortlich, von denen einige neu eingehende Verbindungen erfassen und andere den angeforderten Content bereitstellen
* Für jeden Prozess gibt es einen dazugehörigen Thread (ein einzelner Thread kann jeweils eine Verbindung verwalten), sodass ein Prozess mit mehreren Anfragen gleichzeitig umgehen kann
* Diese Methode für die Handhabung von Verbindungen fördert eine bessere Ressourcennutzung und gewährleistet die Aufrechterhaltung der Stabilität
* Das ist auf das Bündel von verfügbaren Prozessen zurückzuführen, bei denen oft frei verfügbare Threads bereitstehen, die neue Verbindungen sofort bedienen können


; Event
; Event
Basierend auf Worker geht dieses MPM noch einen Schritt weiter, indem es die Art und Weise optimiert, wie der Elternprozess Aufgaben für die Kindprozesse und für die Threads, die damit verknüpft sind, vorgibt. Eine Verbindung bleibt für 5 Sekunden standardmäßig geöffnet und schließt sich bei jedem neuen Ereignis, das eintritt; das ist der Standardwert für die Keep-Alive-Anweisung, der den mit ihm verknüpften Thread beibehält. Das Event MPM ermöglicht dem Prozess das Verwalten von Threads, damit einige Threads für die Verwaltung neuer eingehender Verbindungen bereitstehen, während andere weiterhin mit den Live-Verbindungen verknüpft sind. Die Ressourcennutzung und Leistungsfähigkeit wird dadurch verbessert, dass die den Threads zugewiesenen Aufgaben neu verteilt werden können.
Basierend auf Worker geht dieses MPM noch einen Schritt weiter, indem es die Art und Weise optimiert, wie der Elternprozess Aufgaben für die Kindprozesse und für die Threads, die damit verknüpft sind, vorgibt
* Eine Verbindung bleibt für 5 Sekunden standardmäßig geöffnet und schließt sich bei jedem neuen Ereignis, das eintritt; das ist der Standardwert für die Keep-Alive-Anweisung, der den mit ihm verknüpften Thread beibehält
* Das Event MPM ermöglicht dem Prozess das Verwalten von Threads, damit einige Threads für die Verwaltung neuer eingehender Verbindungen bereitstehen, während andere weiterhin mit den Live-Verbindungen verknüpft sind
* Die Ressourcennutzung und Leistungsfähigkeit wird dadurch verbessert, dass die den Threads zugewiesenen Aufgaben neu verteilt werden können


Mit dem MPM Event-Modul ist ein schnelles Multi-Processing-Modul auf dem Apache-HTTP-Webserver verfügbar.
Mit dem MPM Event-Modul ist ein schnelles Multi-Processing-Modul auf dem Apache-HTTP-Webserver verfügbar


PHP-FPM ist der FastCGI-Prozessmanager für PHP. Das FastCGI-Protokoll basiert auf dem Common Gateway Interface (CGI), einem Protokoll, das zwischen Anwendungen und Webservern wie Apache HTTP steht. Dadurch können Entwickler Anwendungen schreiben, ohne das Verhalten der Webserver berücksichtigen zu müssen. Die Programme führen ihre Prozesse unabhängig aus und übergeben ihr Produkt über dieses Protokoll an den Webserver. Jede neue Verbindung, die von einer Anwendung verarbeitet werden muss, erstellt einen neuen Prozess.
PHP-FPM ist der FastCGI-Prozessmanager für PHP
* Das FastCGI-Protokoll basiert auf dem Common Gateway Interface (CGI), einem Protokoll, das zwischen Anwendungen und Webservern wie Apache HTTP steht
* Dadurch können Entwickler Anwendungen schreiben, ohne das Verhalten der Webserver berücksichtigen zu müssen
* Die Programme führen ihre Prozesse unabhängig aus und übergeben ihr Produkt über dieses Protokoll an den Webserver
* Jede neue Verbindung, die von einer Anwendung verarbeitet werden muss, erstellt einen neuen Prozess


Durch die Kombination von MPM Event in Apache HTTP mit dem PHP FastCGI-Prozessmanager (PHP-FPM) kann eine Website schneller laden und mehr gleichzeitige Verbindungen mit weniger Ressourcen verarbeiten.
Durch die Kombination von MPM Event in Apache HTTP mit dem PHP FastCGI-Prozessmanager (PHP-FPM) kann eine Website schneller laden und mehr gleichzeitige Verbindungen mit weniger Ressourcen verarbeiten


In diesem Tutorial verbessern Sie die Leistung des LAMP-Stacks, indem Sie das standardmäßige Multi-Processing-Module von Prefork auf Event umstellen und den PHP-FPM-Prozessmanager für die Handhabung des PHP-Codes nutzen anstelle des klassischen mod_php in Apache HTTP.
In diesem Tutorial verbessern Sie die Leistung des LAMP-Stacks, indem Sie das standardmäßige Multi-Processing-Module von Prefork auf Event umstellen und den PHP-FPM-Prozessmanager für die Handhabung des PHP-Codes nutzen anstelle des klassischen mod_php in Apache HTTP


== Konfiguration ==
== Konfiguration ==
Zeile 29: Zeile 44:


; Apache-HTTP-Dienst anhalten
; Apache-HTTP-Dienst anhalten
sudo systemctl stop apache2
sudo systemctl stop apache2


Nun können Sie das Modul PHP deaktivieren, das mit dem Prefork-Modul in Verbindung steht:
Nun können Sie das Modul PHP deaktivieren, das mit dem Prefork-Modul in Verbindung steht:
sudo a2dismod php8.3
sudo a2dismod php8.3


Prefork MPM-Modul deaktivieren
Prefork MPM-Modul deaktivieren
sudo a2dismod mpm_prefork
sudo a2dismod mpm_prefork


Event MPM-Modul aktivieren
Event MPM-Modul aktivieren
sudo a2enmod mpm_event
sudo a2enmod mpm_event


; Apache-HTTP-Dienst starten
; Apache-HTTP-Dienst starten
sudo systemctl start apache2
sudo systemctl start apache2


; Kontolle
; Kontolle
Zeile 47: Zeile 62:




Sie haben das MPM von Prefork auf Event umgestellt und die Modulverbindung PHP 7.2 zwischen PHP und Apache HTTP entfernt.
Sie haben das MPM von Prefork auf Event umgestellt und die Modulverbindung PHP 7.2 zwischen PHP und Apache HTTP entfernt


Im nächsten Schritt installieren Sie das php-fpm-Modul sowie die verwandten Bibliotheken und Proxy-Module.
Im nächsten Schritt installieren Sie das php-fpm-Modul sowie die verwandten Bibliotheken und Proxy-Module


Sie konfigurieren Apache HTTP so, dass es auch mit PHP kommunizieren kann.
Sie konfigurieren Apache HTTP so, dass es auch mit PHP kommunizieren kann


=== Nutzung des FastCGI-Prozesses ===
=== Nutzung des FastCGI-Prozesses ===
; Konfigurieren von Apache HTTP für die Nutzung des FastCGI-Prozesses
; Konfigurieren von Apache HTTP für die Nutzung des FastCGI-Prozesses
In dieser Phase haben Sie die Verarbeitung von Verbindungen durch Apache HTTP umgestellt, indem Sie sie von dem Prefork-MPM auf Event verlagert haben. Im Zuge dessen haben Sie jedoch das PHP-Modul deaktiviert, das Apache HTTP mit jedem Programm verbunden hatte, das mit PHP ausgeführt wird.
In dieser Phase haben Sie die Verarbeitung von Verbindungen durch Apache HTTP umgestellt, indem Sie sie von dem Prefork-MPM auf Event verlagert haben
* Im Zuge dessen haben Sie jedoch das PHP-Modul deaktiviert, das Apache HTTP mit jedem Programm verbunden hatte, das mit PHP ausgeführt wird


In diesem Schritt installieren Sie den PHP-FPM-Prozessor, damit Apache HTTP wieder PHP-Programme verarbeiten kann. Außerdem installieren Sie die Abhängigkeitsbibliotheken und aktivieren die Module, damit beide reibungslos und schneller zusammenarbeiten können als zuvor.
In diesem Schritt installieren Sie den PHP-FPM-Prozessor, damit Apache HTTP wieder PHP-Programme verarbeiten kann
* Außerdem installieren Sie die Abhängigkeitsbibliotheken und aktivieren die Module, damit beide reibungslos und schneller zusammenarbeiten können als zuvor


Installieren Sie zuerst php-fpm. Der folgende Befehl installiert das PHP-FPM und aktiviert automatisch den Dienst php7.2-fpm, der in systemd integriert ist, sodass der Dienst beim Booten gestartet wird:
Installieren Sie zuerst php-fpm
sudo apt install php-fpm
* Der folgende Befehl installiert das PHP-FPM und aktiviert automatisch den Dienst php7.2-fpm, der in systemd integriert ist, sodass der Dienst beim Booten gestartet wird:
Apache HTTP und PHP benötigen für die Kommunikation eine Bibliothek, die diese Funktion ermöglicht. Nun installieren Sie libapache2-mod-fcgid, das als Schnittstelle zwischen Programmen mit Webservern dient und Apache-HTTP-spezifisch ist. Diese Kommunikation erfolgt über ein UNIX-Socket.
sudo apt install php-fpm
Apache HTTP und PHP benötigen für die Kommunikation eine Bibliothek, die diese Funktion ermöglicht
* Nun installieren Sie libapache2-mod-fcgid, das als Schnittstelle zwischen Programmen mit Webservern dient und Apache-HTTP-spezifisch ist
* Diese Kommunikation erfolgt über ein UNIX-Socket


Installieren Sie diese Bibliothek
Installieren Sie diese Bibliothek
sudo apt install libapache2-mod-fcgid
sudo apt install libapache2-mod-fcgid
Sie haben php-fpm und das libapache2-mod-fcgid installiert, aber noch keines davon aktiviert.
Sie haben php-fpm und das libapache2-mod-fcgid installiert, aber noch keines davon aktiviert


Aktivieren Sie zuerst das php-fpm-Modul mit folgendem Befehl:
Aktivieren Sie zuerst das php-fpm-Modul mit folgendem Befehl:
sudo a2enconf php7.2-fpm
sudo a2enconf php7.2-fpm


Aktivieren Sie in einem zweiten Schritt das Apache HTTP-Proxy-Modul:
Aktivieren Sie in einem zweiten Schritt das Apache HTTP-Proxy-Modul:
sudo a2enmod proxy
sudo a2enmod proxy


Aktivieren Sie in einem dritten Schritt das FastCGI-Proxy-Modul auf Apache HTTP:
Aktivieren Sie in einem dritten Schritt das FastCGI-Proxy-Modul auf Apache HTTP:
sudo a2enmod proxy_fcgi
sudo a2enmod proxy_fcgi


; Hinweis
; Hinweis
Zeile 81: Zeile 101:


; Konfigurationsüberprüfung
; Konfigurationsüberprüfung
Nun wurden alle Vorkehrungen getroffen, damit Sie Apache HTTP starten können. Führen Sie eine Konfigurationsüberprüfung durch:
Nun wurden alle Vorkehrungen getroffen, damit Sie Apache HTTP starten können
sudo apachectl configtest  
* Führen Sie eine Konfigurationsüberprüfung durch:
sudo apachectl configtest
  Syntax OK
  Syntax OK
 
Danach können Sie mit dem Neustart von Apache HTTP fortfahren, da es beim Installieren der FastCGI-Bibliothek libapache2-mod-fcgid automatisch gestartet wurde:
Danach können Sie mit dem Neustart von Apache HTTP fortfahren, da es beim Installieren der FastCGI-Bibliothek libapache2-mod-fcgid automatisch gestartet wurde:
Sie haben das php-fpm-Modul installiert und Apache HTTP so konfiguriert, dass es damit funktioniert. Zudem haben Sie ermöglicht, dass die erforderlichen Module für das FastCGI-Protokoll funktionieren, und die entsprechenden Dienste gestartet.


Nachdem Apache das Event MPM-Modul aktiviert hat und PHP-FPM verfügbar ist und ausgeführt wird, ist es an der Zeit sicherzustellen, das alles wie geplant funktioniert.
Sie haben das php-fpm-Modul installiert und Apache HTTP so konfiguriert, dass es damit funktioniert
* Zudem haben Sie ermöglicht, dass die erforderlichen Module für das FastCGI-Protokoll funktionieren, und die entsprechenden Dienste gestartet
 
Nachdem Apache das Event MPM-Modul aktiviert hat und PHP-FPM verfügbar ist und ausgeführt wird, ist es an der Zeit sicherzustellen, das alles wie geplant funktioniert


=== Test ===
=== Test ===
Führen Sie einige Tests aus, um zu prüfen, ob die Konfigurationsänderungen angewandt wurden. Beim ersten Test wird geprüft, welches Multi-Processing-Modul Apache HTTP verwendet. Beim zweiten Test wird sichergestellt, dass PHP den FPM-Manager verwendet.
Führen Sie einige Tests aus, um zu prüfen, ob die Konfigurationsänderungen angewandt wurden
* Beim ersten Test wird geprüft, welches Multi-Processing-Modul Apache HTTP verwendet
* Beim zweiten Test wird sichergestellt, dass PHP den FPM-Manager verwendet


Überprüfen Sie den Apache-HTTP-Server, indem Sie den folgenden Befehl ausführen:
Überprüfen Sie den Apache-HTTP-Server, indem Sie den folgenden Befehl ausführen:
sudo apachectl -M | grep 'mpm'
sudo apachectl -M | grep 'mpm'
Sie erhalten folgende Ausgabe:
Sie erhalten folgende Ausgabe:
  mpm_event_module (shared)
  mpm_event_module (shared)
Für das Proxy-Modul und FastCGI können Sie diese Prozedur wiederholen:
Für das Proxy-Modul und FastCGI können Sie diese Prozedur wiederholen:
sudo apachectl -M | grep 'proxy'
sudo apachectl -M | grep 'proxy'
Die Ausgabe zeigt Folgendes:
Die Ausgabe zeigt Folgendes:
  proxy_module (shared)
  proxy_module (shared)
  proxy_fcgi_module (shared)
  proxy_fcgi_module (shared)
Wenn Sie die gesamte Liste der Module sehen möchten, können Sie den zweiten Teil des Befehls nach -M entfernen.
Wenn Sie die gesamte Liste der Module sehen möchten, können Sie den zweiten Teil des Befehls nach -M entfernen


Nun ist es Zeit zu prüfen, ob PHP den FastCGI-Prozessmanager verwendet. Dazu schreiben Sie ein kleines PHP-Skript, das Ihnen alle Informationen zeigt, die mit PHP in Verbindung stehen.
Nun ist es Zeit zu prüfen, ob PHP den FastCGI-Prozessmanager verwendet
* Dazu schreiben Sie ein kleines PHP-Skript, das Ihnen alle Informationen zeigt, die mit PHP in Verbindung stehen


Führen Sie den folgenden Befehl aus, um eine Datei zu schreiben, deren Name wie folgt lautet:
Führen Sie den folgenden Befehl aus, um eine Datei zu schreiben, deren Name wie folgt lautet:
sudo nano /var/www/your_domain/info.php
sudo nano /var/www/your_domain/info.php
Fügen Sie den folgenden Inhalt in die Datei info.php ein:
Fügen Sie den folgenden Inhalt in die Datei info.php ein:


info.php
info.php
  <?php phpinfo(); ?>
  <?php phpinfo(); ?>
Rufen Sie nun die URL Ihres Servers auf und fügen Sie info.php am Ende hinzu: https://your_domain/info.php.
Rufen Sie nun die URL Ihres Servers auf und fügen Sie info.php am Ende hinzu: https://your_domain/info.php


Der Server-API-Eintrag lautet '''FPM/FastCGI'''.
Der Server-API-Eintrag lautet '''FPM/FastCGI'''


Löschen Sie die Datei info.php nach diesem Test, damit keine Informationen über den Server veröffentlicht werden:
Löschen Sie die Datei info.php nach diesem Test, damit keine Informationen über den Server veröffentlicht werden:
sudo rm /var/www/yourdomain.com/info.php
sudo rm /var/www/yourdomain.com/info.php
Sie haben den Betriebszustand des MPM-Moduls und der Module, die für die Handhabung von FastCGI zuständig sind, sowie die Handhabung des PHP-Codes überprüft.
Sie haben den Betriebszustand des MPM-Moduls und der Module, die für die Handhabung von FastCGI zuständig sind, sowie die Handhabung des PHP-Codes überprüft


<noinclude>
<noinclude>
Zeile 135: Zeile 160:


= TMP =
= TMP =
  Could not detect the PHP and Apache configuration  
  Could not detect the PHP and Apache configuration
  because exec is disabled or apachectl is not working as expected.
  because exec is disabled or apachectl is not working as expected


; Note
; Note
* PHP can only be used with the MPM_PREFORK module  
* PHP can only be used with the MPM_PREFORK module
* PHP-FPM can only be used with the MPM_EVENT module
* PHP-FPM can only be used with the MPM_EVENT module


sudo a2enmod mpm_event
sudo a2enmod mpm_event
  Considering conflict mpm_worker for mpm_event:
  Considering conflict mpm_worker for mpm_event:
  Considering conflict mpm_prefork for mpm_event:
  Considering conflict mpm_prefork for mpm_event:
  ERROR: Module mpm_prefork is enabled - cannot proceed due to conflicts. It needs to be disabled first!
  ERROR: Module mpm_prefork is enabled - cannot proceed due to conflicts
* It needs to be disabled first!


; mpm_event
; mpm_event
sudo a2dismod mpm_event
sudo a2dismod mpm_event
Module mpm_event disabled.
Module mpm_event disabled
To activate the new configuration, you need to run:
To activate the new configuration, you need to run:
  systemctl restart apache2
  systemctl restart apache2


sudo a2enmod mpm_prefork
sudo a2enmod mpm_prefork
  Considering conflict mpm_event for mpm_prefork:
  Considering conflict mpm_event for mpm_prefork:
  Considering conflict mpm_worker for mpm_prefork:
  Considering conflict mpm_worker for mpm_prefork:
  Enabling module mpm_prefork.
  Enabling module mpm_prefork


To activate the new configuration, you need to run:
To activate the new configuration, you need to run:
  systemctl restart apache2
  systemctl restart apache2


sudo a2enmod php7.2
sudo a2enmod php7.2
sudo systemctl restart apache2
sudo systemctl restart apache2


[[Kategorie:Apache/HTTP/MPM]]
[[Kategorie:Apache/HTTP/MPM]]

Aktuelle Version vom 13. September 2025, 01:06 Uhr

Apache/HTTP/MPM/Event

Beschreibung

Der Apache-HTTP-Webserver wurde im Laufe der Jahre weiterentwickelt, damit er in verschiedenen Umgebungen arbeitet und verschiedene Anforderungen erfüllt

  • Ein wichtiges Problem, das Apache HTTP wie jeder andere Webserver auch lösen muss, ist die Handhabung verschiedener Prozesse bei der Bearbeitung von http-basierten Anfragen
  • Dazu zählt das Öffnen eines Sockets, das die Anforderung verarbeitet, das Offenhalten der Verbindung für eine bestimmte Zeit, die Handhabung neuer Ereignisse, die während dieser Verbindung eintreten und die Rückgabe des produzierten Contents durch ein Programm, dass in einer bestimmten Sprache geschrieben wurde (wie PHP, Perl oder Python)
  • Diese Aufgaben werden von einem Multi-Processing-Module (MPM) ausgeführt und gesteuert

Multi-Processing-Module (MPMs)

Apache HTTP ist mit drei verschiedenen MPM ausgestattet

Prefork

Für jede eingehende Verbindung, die den Server erreicht, wird ein neuer Vorgang erstellt

  • Jeder Vorgang ist isoliert von den anderen und es wird kein Speicher zwischen ihnen geteilt, selbst dann, wenn sie in der Ausführung identische Anrufe an einem bestimmten Punkt ausführen
  • Auf diese Weise können Sie mit Bibliotheken verknüpfte Anwendungen, die Thread-Ausführungen nicht unterstützen, sicher ausführen - meist ältere Anwendungen oder Bibliotheken
Worker

Ein Elternprozess ist für das Starten eines Bündels von Kindprozessen verantwortlich, von denen einige neu eingehende Verbindungen erfassen und andere den angeforderten Content bereitstellen

  • Für jeden Prozess gibt es einen dazugehörigen Thread (ein einzelner Thread kann jeweils eine Verbindung verwalten), sodass ein Prozess mit mehreren Anfragen gleichzeitig umgehen kann
  • Diese Methode für die Handhabung von Verbindungen fördert eine bessere Ressourcennutzung und gewährleistet die Aufrechterhaltung der Stabilität
  • Das ist auf das Bündel von verfügbaren Prozessen zurückzuführen, bei denen oft frei verfügbare Threads bereitstehen, die neue Verbindungen sofort bedienen können
Event

Basierend auf Worker geht dieses MPM noch einen Schritt weiter, indem es die Art und Weise optimiert, wie der Elternprozess Aufgaben für die Kindprozesse und für die Threads, die damit verknüpft sind, vorgibt

  • Eine Verbindung bleibt für 5 Sekunden standardmäßig geöffnet und schließt sich bei jedem neuen Ereignis, das eintritt; das ist der Standardwert für die Keep-Alive-Anweisung, der den mit ihm verknüpften Thread beibehält
  • Das Event MPM ermöglicht dem Prozess das Verwalten von Threads, damit einige Threads für die Verwaltung neuer eingehender Verbindungen bereitstehen, während andere weiterhin mit den Live-Verbindungen verknüpft sind
  • Die Ressourcennutzung und Leistungsfähigkeit wird dadurch verbessert, dass die den Threads zugewiesenen Aufgaben neu verteilt werden können

Mit dem MPM Event-Modul ist ein schnelles Multi-Processing-Modul auf dem Apache-HTTP-Webserver verfügbar

PHP-FPM ist der FastCGI-Prozessmanager für PHP

  • Das FastCGI-Protokoll basiert auf dem Common Gateway Interface (CGI), einem Protokoll, das zwischen Anwendungen und Webservern wie Apache HTTP steht
  • Dadurch können Entwickler Anwendungen schreiben, ohne das Verhalten der Webserver berücksichtigen zu müssen
  • Die Programme führen ihre Prozesse unabhängig aus und übergeben ihr Produkt über dieses Protokoll an den Webserver
  • Jede neue Verbindung, die von einer Anwendung verarbeitet werden muss, erstellt einen neuen Prozess

Durch die Kombination von MPM Event in Apache HTTP mit dem PHP FastCGI-Prozessmanager (PHP-FPM) kann eine Website schneller laden und mehr gleichzeitige Verbindungen mit weniger Ressourcen verarbeiten

In diesem Tutorial verbessern Sie die Leistung des LAMP-Stacks, indem Sie das standardmäßige Multi-Processing-Module von Prefork auf Event umstellen und den PHP-FPM-Prozessmanager für die Handhabung des PHP-Codes nutzen anstelle des klassischen mod_php in Apache HTTP

Konfiguration

Umstellen des Multi-Processing-Modules

Beispiel

Von mpm_prefork zu mpm_event wechseln

Apache-HTTP-Dienst anhalten

sudo systemctl stop apache2

Nun können Sie das Modul PHP deaktivieren, das mit dem Prefork-Modul in Verbindung steht: sudo a2dismod php8.3

Prefork MPM-Modul deaktivieren sudo a2dismod mpm_prefork

Event MPM-Modul aktivieren sudo a2enmod mpm_event

Apache-HTTP-Dienst starten

sudo systemctl start apache2

Kontolle

sudo systemctl status apache2


Sie haben das MPM von Prefork auf Event umgestellt und die Modulverbindung PHP 7.2 zwischen PHP und Apache HTTP entfernt

Im nächsten Schritt installieren Sie das php-fpm-Modul sowie die verwandten Bibliotheken und Proxy-Module

Sie konfigurieren Apache HTTP so, dass es auch mit PHP kommunizieren kann

Nutzung des FastCGI-Prozesses

Konfigurieren von Apache HTTP für die Nutzung des FastCGI-Prozesses

In dieser Phase haben Sie die Verarbeitung von Verbindungen durch Apache HTTP umgestellt, indem Sie sie von dem Prefork-MPM auf Event verlagert haben

  • Im Zuge dessen haben Sie jedoch das PHP-Modul deaktiviert, das Apache HTTP mit jedem Programm verbunden hatte, das mit PHP ausgeführt wird

In diesem Schritt installieren Sie den PHP-FPM-Prozessor, damit Apache HTTP wieder PHP-Programme verarbeiten kann

  • Außerdem installieren Sie die Abhängigkeitsbibliotheken und aktivieren die Module, damit beide reibungslos und schneller zusammenarbeiten können als zuvor

Installieren Sie zuerst php-fpm

  • Der folgende Befehl installiert das PHP-FPM und aktiviert automatisch den Dienst php7.2-fpm, der in systemd integriert ist, sodass der Dienst beim Booten gestartet wird:

sudo apt install php-fpm Apache HTTP und PHP benötigen für die Kommunikation eine Bibliothek, die diese Funktion ermöglicht

  • Nun installieren Sie libapache2-mod-fcgid, das als Schnittstelle zwischen Programmen mit Webservern dient und Apache-HTTP-spezifisch ist
  • Diese Kommunikation erfolgt über ein UNIX-Socket

Installieren Sie diese Bibliothek sudo apt install libapache2-mod-fcgid Sie haben php-fpm und das libapache2-mod-fcgid installiert, aber noch keines davon aktiviert

Aktivieren Sie zuerst das php-fpm-Modul mit folgendem Befehl: sudo a2enconf php7.2-fpm

Aktivieren Sie in einem zweiten Schritt das Apache HTTP-Proxy-Modul: sudo a2enmod proxy

Aktivieren Sie in einem dritten Schritt das FastCGI-Proxy-Modul auf Apache HTTP: sudo a2enmod proxy_fcgi

Hinweis
Sie können die Konfiguration dieser Interaktion zwischen PHP-Programmen und Apache HTTP über einen UNIX-Socket mit Folgendem lesen:
cat /etc/apache2/conf-enabled/php7.2-fpm.conf
Konfigurationsüberprüfung

Nun wurden alle Vorkehrungen getroffen, damit Sie Apache HTTP starten können

  • Führen Sie eine Konfigurationsüberprüfung durch:

sudo apachectl configtest

Syntax OK

Danach können Sie mit dem Neustart von Apache HTTP fortfahren, da es beim Installieren der FastCGI-Bibliothek libapache2-mod-fcgid automatisch gestartet wurde:

Sie haben das php-fpm-Modul installiert und Apache HTTP so konfiguriert, dass es damit funktioniert

  • Zudem haben Sie ermöglicht, dass die erforderlichen Module für das FastCGI-Protokoll funktionieren, und die entsprechenden Dienste gestartet

Nachdem Apache das Event MPM-Modul aktiviert hat und PHP-FPM verfügbar ist und ausgeführt wird, ist es an der Zeit sicherzustellen, das alles wie geplant funktioniert

Test

Führen Sie einige Tests aus, um zu prüfen, ob die Konfigurationsänderungen angewandt wurden

  • Beim ersten Test wird geprüft, welches Multi-Processing-Modul Apache HTTP verwendet
  • Beim zweiten Test wird sichergestellt, dass PHP den FPM-Manager verwendet

Überprüfen Sie den Apache-HTTP-Server, indem Sie den folgenden Befehl ausführen: sudo apachectl -M | grep 'mpm' Sie erhalten folgende Ausgabe:

mpm_event_module (shared)

Für das Proxy-Modul und FastCGI können Sie diese Prozedur wiederholen: sudo apachectl -M | grep 'proxy' Die Ausgabe zeigt Folgendes:

proxy_module (shared)
proxy_fcgi_module (shared)

Wenn Sie die gesamte Liste der Module sehen möchten, können Sie den zweiten Teil des Befehls nach -M entfernen

Nun ist es Zeit zu prüfen, ob PHP den FastCGI-Prozessmanager verwendet

  • Dazu schreiben Sie ein kleines PHP-Skript, das Ihnen alle Informationen zeigt, die mit PHP in Verbindung stehen

Führen Sie den folgenden Befehl aus, um eine Datei zu schreiben, deren Name wie folgt lautet: sudo nano /var/www/your_domain/info.php Fügen Sie den folgenden Inhalt in die Datei info.php ein:

info.php

<?php phpinfo(); ?>

Rufen Sie nun die URL Ihres Servers auf und fügen Sie info.php am Ende hinzu: https://your_domain/info.php

Der Server-API-Eintrag lautet FPM/FastCGI

Löschen Sie die Datei info.php nach diesem Test, damit keine Informationen über den Server veröffentlicht werden: sudo rm /var/www/yourdomain.com/info.php Sie haben den Betriebszustand des MPM-Moduls und der Module, die für die Handhabung von FastCGI zuständig sind, sowie die Handhabung des PHP-Codes überprüft


Anhang

Siehe auch

Dokumentation

Links

Projekt

Weblinks

  1. https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04-de


TMP

Could not detect the PHP and Apache configuration
because exec is disabled or apachectl is not working as expected
Note
  • PHP can only be used with the MPM_PREFORK module
  • PHP-FPM can only be used with the MPM_EVENT module

sudo a2enmod mpm_event

Considering conflict mpm_worker for mpm_event:
Considering conflict mpm_prefork for mpm_event:
ERROR: Module mpm_prefork is enabled - cannot proceed due to conflicts
  • It needs to be disabled first!
mpm_event

sudo a2dismod mpm_event Module mpm_event disabled To activate the new configuration, you need to run:

systemctl restart apache2

sudo a2enmod mpm_prefork

Considering conflict mpm_event for mpm_prefork:
Considering conflict mpm_worker for mpm_prefork:
Enabling module mpm_prefork

To activate the new configuration, you need to run:

systemctl restart apache2

sudo a2enmod php7.2 sudo systemctl restart apache2