Der Autor hat den COVID-19 Relief Fund dazu ausgewählt, eine Spende im Rahmen des Programms Write for DOnations zu erhalten.
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.
Apache HTTP ist mit drei verschiedenen MPM ausgestattet:
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.
Bevor Sie diese Anleitung beginnen, benötigen Sie Folgendes:
Ubuntu übernimmt Skripte, um Apache-HTTP-Module über die eigene übergeordnete Distribution Debian zu aktivieren oder zu deaktivieren. Sie werden dieses Toolset in diesem Schritt verwenden, um das Prefork-Modul zu deaktivieren und das Event-Modul zu aktivieren.
In diesem Schritt halten Sie Apache HTTP an, deaktivieren das Modul PHP 7.2
, das mit dem Prefork-Modul verknüpft ist, und deaktivieren anschließend Prefork, um das Event-Modul unmittelbar aktivieren zu können.
Zuerst halten Sie den Apache-HTTP-Dienst an:
- sudo systemctl stop apache2
Nun können Sie das Modul PHP 7.2
deaktivieren, das mit dem Prefork-Modul in Verbindung steht:
- sudo a2dismod php7.2
Deaktivieren Sie dann das Prefork MPM-Modul:
- sudo a2dismod mpm_prefork
Nun Aktivieren Sie das Event MPM-Modul:
- sudo a2enmod mpm_event
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.
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
Nun wurden alle Vorkehrungen getroffen, damit Sie Apache HTTP starten können. Führen Sie eine Konfigurationsüberprüfung durch:
- sudo apachectl configtest
OutputSyntax 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:
- sudo systemctl restart apache2
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.
Führen Sie einige Tests aus, um zu prüfen, ob die Konfigurationsänderungen angewendet 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:
Outputmpm_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:
Outputproxy_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:
<?php phpinfo(); ?>
Rufen Sie nun die URL Ihres Servers auf und fügen Sie info.php
am Ende hinzu: http://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.
Sie haben Ihren ursprünglichen LAMP-Stack optimiert, sodass sich die Anzahl der Verbindungen zur Erstellung neuer Apache HTTP-Prozesse erhöht hat, PHP-FPM den PHP-Code effizienter verwaltet und sich die Ressourcennutzung insgesamt verbessert.
Weitere Informationen zu den verschiedenen Modulen und verwandten Projekten finden Sie in der Projekt-Dokumentation zum Apache HTTP-Server.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Vielen Dank für die Anleitung. Sie hat mir bei einem Umstieg von Mint 19.3 auf Mint 20 in Verbindung mit einem Upgrade auf PHP 7.4 sehr weitergeholfen.