So konfigurieren Sie Apache HTTP mit MPM Event und PHP-FPM unter FreeBSD 12.0

Der Autor hat die Open Internet / Free Speech Fund ausgewählt, um eine Spende als Teil der https://do.co/w4do-cta zu erhalten [Write for DOnations] program.

Einführung

Der Webserver Apache HTTP hat sich im Laufe der Jahre weiterentwickelt, um in verschiedenen Umgebungen zu arbeiten und unterschiedliche Anforderungen zu erfüllen. Ein wichtiges Problem, das Apache HTTP wie jeder Webserver lösen muss, ist die Behandlung verschiedener Prozesse, um eine HTTP-Protokollanforderung zu bearbeiten. Dies beinhaltet das Öffnen eines Sockets, das Verarbeiten der Anforderung, das Offenhalten der Verbindung für einen bestimmten Zeitraum, das Behandeln neuer Ereignisse, die über diese Verbindung auftreten, und das Zurückgeben des Inhalts, der von einem Programm erstellt wurde, das in einer bestimmten Sprache (wie PHP, Perl oder Python) erstellt wurde. . Diese Aufgaben werden von einem Multi-Processing Module (MPM) ausgeführt und gesteuert.

Apache HTTP wird mit drei verschiedenen MPM geliefert:

  • * Pre-Fork *: Für jede eingehende Verbindung, die den Server erreicht, wird ein neuer Prozess erstellt. Jeder Prozess ist von den anderen isoliert, sodass kein Speicher zwischen ihnen geteilt wird, selbst wenn sie zu einem bestimmten Zeitpunkt in ihrer Ausführung identische Aufrufe ausführen. Dies ist eine sichere Methode zum Ausführen von Anwendungen, die mit Bibliotheken verknüpft sind, die Threading-typische ältere Anwendungen oder Bibliotheken nicht unterstützen.

  • * Worker *: Ein übergeordneter Prozess ist dafür verantwortlich, einen Pool von untergeordneten Prozessen zu starten, von denen einige auf neue eingehende Verbindungen warten und andere den angeforderten Inhalt bereitstellen. Jeder Prozess hat einen Thread (ein einzelner Thread kann eine Verbindung verarbeiten), sodass ein Prozess mehrere Anforderungen gleichzeitig verarbeiten kann. Diese Methode zur Behandlung von Verbindungen fördert eine bessere Ressourcennutzung bei gleichzeitiger Wahrung der Stabilität. Dies ist ein Ergebnis des Pools verfügbarer Prozesse, der häufig über frei verfügbare Threads verfügt, um sofort neue Verbindungen bereitzustellen.

  • * Ereignis *: Basierend auf dem Worker geht dieser MPM einen Schritt weiter, indem optimiert wird, wie der übergeordnete Prozess Aufgaben für die untergeordneten Prozesse und die diesen zugeordneten Threads plant. Eine Verbindung bleibt standardmäßig 5 Sekunden lang geöffnet und wird geschlossen, wenn kein neues Ereignis eintritt. Dies ist der Standardwert der Keep-Alive-Direktive, der den zugeordneten Thread beibehält. Mit dem Ereignis-MPM kann der Prozess Threads verwalten, sodass einige Threads neue eingehende Verbindungen verarbeiten können, während andere an die Live-Verbindungen gebunden bleiben. Das Zulassen der Neuverteilung von zugewiesenen Aufgaben auf Threads sorgt für eine bessere Ressourcennutzung und -leistung.

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

PHP-FPM ist der FastCGI Process Manager für PHP. Das FastCGI-Protokoll basiert auf dem Common Gateway Interface (CGI), einem Protokoll, das sich zwischen Anwendungen und Webservern wie Apache HTTP befindet. Auf diese Weise können Entwickler Anwendungen unabhängig vom Verhalten von Webservern schreiben. Programme führen ihre Prozesse unabhängig voneinander aus und geben ihr Produkt über dieses Protokoll an den Webserver weiter. Jede neue Verbindung, die von einer Anwendung verarbeitet werden muss, erstellt einen neuen Prozess.

Durch die Kombination des MPM-Ereignisses in Apache HTTP mit dem PHP-FastCGI-Prozessmanager (PHP-FPM) kann eine Website schneller geladen werden und mehr gleichzeitige Verbindungen verarbeiten, während weniger Ressourcen verwendet werden.

In diesem Tutorial verbessern Sie die Leistung von https://www.digitalocean.com/community/tutorials/how-to-install-an-apache-mysql-and-php-famp-stack-on-freebsd-12- 0 [FAMP-Stack] durch Ändern des Standard-Multi-Processing-Moduls von Pre-Fork zu Event und durch Verwenden des PHP-FPM-Prozessmanagers zur Behandlung von PHP-Code anstelle des klassischen + mod_php + in Apache HTTP.

Voraussetzungen

Bevor Sie mit diesem Handbuch beginnen, benötigen Sie Folgendes:

Schritt 1 - Ändern des Multi-Processing-Moduls

Suchen Sie zunächst nach der Pre-Fork-Direktive in der Datei "+ httpd.conf". Dies ist die Hauptkonfigurationsdatei für Apache HTTP, in der Sie Module aktivieren und deaktivieren können. Sie können Anweisungen bearbeiten und festlegen, z. B. den Überwachungsport, an dem Apache HTTP den Inhalt bereitstellt, oder den Speicherort des Inhalts, der in dieser Datei angezeigt werden soll.

Um diese Änderungen vorzunehmen, verwenden Sie das Programm "+ nl ", number line, und das Flag " -ba ", um Zeilen zu zählen und zu nummerieren, damit zu einem späteren Zeitpunkt keine Abweichungen auftreten. In Kombination mit " grep +" zählt dieser Befehl zuerst alle Zeilen in der im Pfad angegebenen Datei und sucht nach Abschluss nach der Zeichenfolge, nach der Sie suchen.

Führen Sie den folgenden Befehl aus, damit das Programm + nl + die Zeilen in + httpd.conf + verarbeitet und nummeriert. Dann verarbeitet "+ grep " die Ausgabe, indem nach der angegebenen Zeichenfolge "" mod_mpm_prefork "+" gesucht wird:

nl -ba /usr/local/etc/apache24/httpd.conf | grep 'mod_mpm_prefork'

Als Ausgabe sehen Sie etwas Ähnliches wie:

Output  LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so

Lassen Sie uns die Zeile mit Ihrem Texteditor bearbeiten. In diesem Tutorial verwenden Sie "+ vi +", den Standardeditor unter FreeBSD:

sudo vi + /usr/local/etc/apache24/httpd.conf

Fügen Sie am Anfang der Zeile ein "+ # +" - Symbol hinzu, damit diese Zeile wie folgt auskommentiert wird:

/usr/local/etc/apache24/httpd.conf

...
# LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
...

Durch Anhängen des "+ # +" - Symbols haben Sie das MPM-Modul vor der Gabelung deaktiviert.

Jetzt finden Sie die Ereignisanweisung in derselben "+ httpd.conf" -Datei.

nl -ba /usr/local/etc/apache24/httpd.conf | grep mpm_event

Es wird eine Ausgabe ähnlich der folgenden angezeigt:

Output...
 #LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
...

Jetzt entfernen Sie das "+ # +" - Symbol in der Zeile, um das Event-MPM zu aktivieren:

sudo vi + /usr/local/etc/apache24/httpd.conf

Die Direktive wird nun wie folgt lauten:

/usr/local/etc/apache24/httpd.conf

...
LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
...

Nachdem Sie die Konfiguration von MPM Pre-Fork auf Event umgestellt haben, können Sie das Paket "+ mod_php73 +" entfernen, das den PHP-Prozessor mit Apache HTTP verbindet, da es nicht mehr erforderlich ist und stört, wenn es auf dem System verbleibt:

sudo pkg remove -y mod_php73

Stellen Sie sicher, dass die Konfiguration korrekt ist, indem Sie den folgenden Befehl zum Testen ausführen:

sudo apachectl configtest

Wenn Sie in Ihrer Ausgabe "+ Syntax OK +" sehen, können Sie den Apache HTTP-Server neu starten:

sudo apachectl restart

Sie haben das MPM von Pre-Fork auf Event umgestellt und die + mod_php73 + - Modulverbindung PHP zu Apache HTTP entfernt. Im nächsten Schritt installieren Sie das PHP-FPM-Modul und konfigurieren Apache HTTP, damit es schneller mit PHP kommunizieren kann.

Schritt 2 - Konfigurieren von Apache HTTP für die Verwendung des FastCGI-Prozessmanagers

FreeBSD bietet mehrere unterstützte PHP-Versionen, die Sie über den Paketmanager installieren können. Unter FreeBSD werden verschiedene Binärdateien der verschiedenen verfügbaren Versionen kompiliert, anstatt nur eine zu verwenden, wie es die meisten GNU / Linux-Distributionen in ihren Standard-Repositorys anbieten. Um die Best Practice zu befolgen, verwenden Sie die unterstützte Version, die Sie unter PHP’s supported versions page nachlesen können.

In diesem Schritt fügen Sie PHP-FPM als laufenden Dienst hinzu, um beim Booten zu starten. Sie können Apache HTTP auch für die Arbeit mit PHP konfigurieren, indem Sie eine spezielle Konfiguration für das Modul hinzufügen und einige weitere Module in + httpd.conf + aktivieren.

Zuerst hängen Sie "" php_fpm_enable = YES "" an die Datei "+ / etc / rc.conf " an, damit der PHP-FPM-Dienst gestartet werden kann. Verwenden Sie dazu den Befehl " sysrc +":

sudo sysrc php_fpm_enable="YES"

Jetzt fügen Sie das "+ php-fpm +" - Modul in das Verzeichnis des Apache-Moduls ein, damit es von Apache HTTP verwendet werden kann. Erstellen Sie dazu die folgende Datei:

sudo vi /usr/local/etc/apache24/modules.d/030_php-fpm.conf

Fügen Sie in + 030_php-fpm.conf + Folgendes hinzu:

/usr/local/etc/apache24/modules.d/030_php-fpm.conf

<IfModule proxy_fcgi_module>
   <IfModule dir_module>
       DirectoryIndex index.php
   </IfModule>
   <FilesMatch "\.(php|phtml|inc)$">
       SetHandler "proxy:fcgi://127.0.0.1:9000"
   </FilesMatch>
</IfModule>

Dies besagt, dass, wenn das Modul "" proxy_fcgi "" sowie das "" dir_module "" aktiviert ist, alle verarbeiteten Dateien, die mit den Erweiterungen in Klammern übereinstimmen, vom FastCGI-Prozessmanager behandelt werden sollten, der über den Port auf dem lokalen Computer ausgeführt wird + 9000 + -wie wenn der lokale Rechner ein Proxy-Server wäre. Hier verbinden sich das PHP-FPM-Modul und Apache HTTP. Um dies zu erreichen, aktivieren Sie in diesem Schritt weitere Module.

Um das Proxy-Modul zu aktivieren, müssen Sie zuerst in der Datei "+ httpd.conf +" danach suchen:

nl -ba /usr/local/etc/apache24/httpd.conf | grep mod_proxy.so

Es wird eine Ausgabe ähnlich der folgenden angezeigt:

Output...
#LoadModule proxy_module libexec/apache24/mod_proxy.so
...

Sie entfernen das Kommentarzeichen in der Zeile, indem Sie das Symbol "+ # +" entfernen:

sudo vi + /usr/local/etc/apache24/httpd.conf

Die Zeile sieht nach der Bearbeitung wie folgt aus:

/usr/local/etc/apache24/httpd.conf

...
LoadModule proxy_module libexec/apache24/mod_proxy.so
...

Jetzt können Sie das FastCGI-Modul aktivieren. Suchen Sie das Modul mit dem folgenden Befehl:

nl -ba /usr/local/etc/apache24/httpd.conf | grep mod_proxy_fcgi.so

Folgendes wird angezeigt:

Output...
#LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so
...

Kommentieren Sie nun die Zeile aus, wie Sie es bereits mit den anderen Modulen getan haben:

sudo vi + /usr/local/etc/apache24/httpd.conf

Sie verlassen die Leitung wie folgt:

/usr/local/etc/apache24/httpd.conf

...
LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so
...

Sobald dies erledigt ist, starten Sie den PHP-FPM-Dienst:

sudo service php-fpm start

Und Sie werden Apache neu starten, damit die neuesten Konfigurationsänderungen geladen werden, die das PHP-Modul beinhalten:

sudo apachectl restart

Sie haben das PHP-FPM-Modul installiert, Apache HTTP für die Verwendung konfiguriert, die erforderlichen Module für das FastCGI-Protokoll aktiviert und die entsprechenden Dienste gestartet.

Nachdem Apache das Event MPM-Modul aktiviert hat und PHP-FPM vorhanden ist und ausgeführt wird, ist es an der Zeit, zu überprüfen, ob alles wie beabsichtigt funktioniert.

Schritt 3 - Überprüfen Sie Ihre Konfiguration

Um zu überprüfen, ob die Konfigurationsänderungen übernommen wurden, führen Sie einige Tests durch. Der erste überprüft, welches Multi-Processing-Modul Apache HTTP verwendet. Der zweite überprüft, ob PHP den FPM-Manager verwendet.

Überprüfen Sie den Apache HTTP-Server, indem Sie den folgenden Befehl ausführen:

sudo apachectl -M | grep 'mpm'

Ihre Ausgabe wird wie folgt sein:

Outputmpm_event_module (shared)

Sie können dasselbe für das Proxy-Modul und FastCGI wiederholen:

sudo apachectl -M | grep 'proxy'

Die Ausgabe zeigt:

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.

Es ist jetzt Zeit zu überprüfen, ob PHP den FastCGI Process Manager verwendet. Dazu schreiben Sie ein sehr kleines PHP-Skript, das Ihnen alle Informationen zu PHP anzeigt.

Führen Sie den folgenden Befehl aus, um eine Datei mit dem folgenden Namen zu schreiben:

sudo vi /usr/local/www/apache24/data/info.php

Fügen Sie den folgenden Inhalt in die Datei info.php ein:

info.php

<?php phpinfo(); ?>

Besuchen Sie nun die URL Ihres Servers und fügen Sie am Ende "+ info.php " wie folgt hinzu: " http: /// info.php +".

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

image: https: //assets.digitalocean.com/articles/MPMEvent/FastCGIPHP.png [PHP überprüft den Server-API-Eintrag FPM / FastCGI]

Denken Sie daran, die Datei "+ info.php" nach dieser Überprüfung zu löschen, damit keine Informationen über den Server öffentlich bekannt gegeben werden.

sudo rm /usr/local/www/apache24/data/info.php

Sie haben den Arbeitsstatus des MPM-Moduls, der Module, die FastCGI verarbeiten, und den Umgang mit PHP-Code überprüft.

Fazit

Sie haben Ihren ursprünglichen FAMP-Stack optimiert, sodass die Anzahl der Verbindungen zum Erstellen neuer Apache-HTTP-Prozesse gestiegen ist, PHP-FPM den PHP-Code effizienter handhabt und die allgemeine Ressourcennutzung verbessert wurde.

Weitere Informationen zu den verschiedenen Modulen und verwandten Projekten finden Sie im Apache HTTP-Server-Projekt documentation.