Wie man Apache und PHP für stark frequentierte Websites auf einem Linux-Server konfiguriert

Apache Php Fpm Featured

Fast jedes Tutorial zur Installation des LAMP-Stapels (Linux, Apache, MySQL, PHP) empfiehlt die Verwendung des integrierten Apache-Moduls zur Verarbeitung von PHP-Skripten. Zum Beispiel würden Sie in Ubuntu dies aktivieren, wenn Sie einen Befehl wie sudo apt install libapache2-mod-php zur Installation eines Pakets verwenden. Dies würde Apache zwingen, mpm_prefork zu verwenden. Jedes Mal, wenn ein Besucher Ihre Website aufruft, wird ein neuer Prozess gestartet, um diese Verbindung zu bearbeiten. Dies funktioniert gut, wenn der Verkehr gering ist.

Aber es wird zu einem großen Problem, wenn Sie einen plötzlichen Besucheransturm bekommen. Zum Beispiel kann ein Reddit-Post Ihre Website erwähnen und wenn der Post populär wird, können Sie in nur wenigen Minuten Tausende von Besuchern erhalten.

Im besten Fall, wenn Apache in der Lage ist, den Ansturm zu bewältigen, müssen einige unglückliche Besucher vielleicht dreißig bis sechzig Sekunden warten, bis die Seite geladen ist, was in der heutigen Welt absurd ist. Im schlimmsten Fall wird der Server stark verzögert, und einige Verbindungen werden einfach wegen mangelnder Ressourcen abgebrochen. In diesem Fall sehen die Besucher einen Fehler in ihren Browsern.

Es ist in jedem Fall ein schlechtes Szenario, da Sie potenziell die Aufmerksamkeit von Hunderten oder Tausenden von interessierten Lesern, Kunden oder Fans verloren haben.

Leider ist PHP in jedem Fall ein ziemlicher Ressourcenfresser. Aber mit mpm_event kann Apache plötzliche Anstiege des Verkehrs viel effizienter bewältigen. Es wird jedoch empfohlen, dass Ihr Server mindestens 2 GB RAM und 2 CPU-Kerne, real oder virtuell, hat und noch mehr, wenn Sie mit intensiven Verkehrsspitzen rechnen, wie mehr als zehn Besucher pro Sekunde. Wenn Sie einen virtuellen privaten Server verwenden, fügen Sie Ihrer Situation weitere virtuelle CPU-Kerne und SSD-Speicher hinzu. RAM ist sekundär.

Auch lesen: Nginx vs Apache: Welcher ist der beste für Sie?

So verwenden Sie Apache MPM Event und PHP-FPM auf Debian-basierten Distributionen

Vermeiden Sie auf Debian, Ubuntu oder anderen Distributionen aus dieser Familie die Installation des “libapache2-mod-php”-Pakets. Wenn Sie Apache installieren, verwendet es standardmäßig MPM event. Aber bei der Installation des genannten Pakets wird ein Skript MPM event deaktivieren und MPM prefork aktivieren. Das Apache PHP-Modul kann nur (sicher) mit mpm_prefork funktionieren. Natürlich haben Sie ohne “libapache2-mod-php” keinen Prozessor für PHP-Dateien. Daher verwenden Sie PHP-FPM anstelle des in Apache enthaltenen PHP-Moduls. Hier ist, wie Sie einen LAMP-Stapel auf einem neuen Server installieren würden. Sie können die Schritte je nach Anforderungen Ihrer Webanwendung anpassen.

Zuerst melden Sie sich als root an. Dann installieren Sie Apache.

apt update && apt install apache2

An diesem Punkt können Sie sehen, dass Apache tatsächlich standardmäßig mit MPM event ausgeliefert wird.

apachectl-V

Apache Php Fpm Check Mpm Debian

Installieren Sie PHP-FPM.

apt install php-fpm

Sie sehen Anweisungen, wie Sie den PHP-Prozessor in Apache aktivieren.

Apache Php Fpm Enable Php Instructions

Aktivieren Sie das FastCGI-Protokoll.

a2enmod proxy_fcgi

Aktivieren Sie die Standardkonfiguration von PHP-FPM für Apache.

a2enconf php7.0-fpm

Hinweis: In zukünftigen Versionen von Debian/Ubuntu könnte dieser Befehl auf etwas anderes wechseln, z.B. a2enconf php7.6-fpm, da PHP-FPM eine andere Version sein würde.

Starten Sie Apache neu.

systemctl restart apache2

Installieren Sie den Rest der Anforderungen für Ihre PHP-Anwendung. Hier ist ein Beispiel:

apt install mariadb-server php-mysql

Dies würde einen Datenbankserver und das PHP MySQL-Modul installieren, damit Ihre PHP-Anwendung eine Verbindung zu einer Datenbank herstellen kann.

Auch lesen: So schützen Sie sich gegen DDoS mit Mod_evasive auf dem Apache-Server

So verwenden Sie Apache MPM Event und PHP-FPM auf RedHat-basierten Distributionen

Die andere beliebte Server-Distributionswahl ist RedHat oder CentOS. Auf die gleiche Weise wie oben wird ein Beispiel für eine saubere Installation von Apache mit aktiviertem MPM event und PHP-FPM angeboten.

Melden Sie sich als root an und installieren Sie Apache.

yum install httpd

Im Gegensatz zu Debian-basierten Distributionen werden Sie hier feststellen, dass Apache standardmäßig MPM prefork verwendet, zumindest auf dem neuesten CentOS 7, das zum Zeitpunkt des Schreibens verfügbar ist.

apachectl-V

Apache Php Fpm Check Mpm Centos

Um MPM event zu aktivieren, müssen Sie eine Konfigurationsdatei bearbeiten.

sed-i'/mpm_prefork\.so$/s/^/#/'/etc/httpd/conf.modules.d/00-mpm.conf

Dadurch wird ein #-Zeichen hinzugefügt, um die Zeile LoadModule mpm_prefork_module modules/mod_mpm_prefork.so zu kommentieren (deaktivieren).

Apache Php Fpm Mpm Conffile On Centos

Jetzt aktivieren Sie die Zeile #LoadModule mpm_event_module modules/mod_mpm_event.so, indem Sie das vorangegangene #-Zeichen mit dem nächsten Befehl entfernen.

sed-i'/mpm_event\.so$/s/^#//'/etc/httpd/conf.modules.d/00-mpm.conf

Starten Sie Apache und aktivieren Sie es, damit es beim Booten automatisch startet.

systemctl start httpd.service  
systemctl enable httpd.service

Überprüfen Sie, ob Apache jetzt MPM event verwendet.

apachectl-V

Apache Php Fpm Mpm Event Enabled Status Centos

Installieren Sie PHP-FPM und das FastCGI-Modul.

yum install php-fpm mod_fcgid

Erstellen Sie “/etc/httpd/conf.d/php.conf”, um Apache zu instruieren, wie PHP-Dateien verarbeitet werden sollen. Kopieren Sie ALLE Inhalte unten und fügen Sie sie auf einmal im Terminal ein, und drücken Sie dann ENTER.

cat</etc/httpd/conf.d/php.conf  
# Weiterleitung an lokale php-fpm, wenn mod_php nicht verfügbar ist  
  
  
# Aktivieren Sie http-Autorisierungsheader  
  
SetEnvIfNoCase ^Authorization$ "(.+)"HTTP_AUTHORIZATION=$1  
IfModule>  
  
  
#SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"  
SetHandler "proxy:fcgi://127.0.0.1:9000"  
FilesMatch>  
  
# Standardmäßig den Zugriff auf rohe PHP-Quellen verweigern  
# Um es wieder zu aktivieren, wird empfohlen, den Zugriff auf die Dateien  
# nur in einem bestimmten virtuellen Host oder Verzeichnis zu erlauben  
Require all denied  
FilesMatch>  
# Verweigerung des Zugriffs auf Dateien ohne Dateiname (z.B. '.php')  
  
Require all denied  
FilesMatch>  
IfModule>  
IfModule>  
PASTE

Das Verdienst für diese großartige Konfiguration geht an Debian. Andere Quellen empfehlen eine einfache Konfigurationsdatei wie:


SetHandler "proxy:fcgi://127.0.0.1:9000"

Aber das ist anfällig für einige Angriffe und wenn bestimmte Dienste ausfallen, könnten Sie PHP-Dateien der Öffentlichkeit zugänglich machen, was potenziell gespeicherte Passwörter, Code und sensible Daten offenlegt.

Starten Sie Apache neu.

systemctl restart httpd.service

Starten Sie PHP-FPM und aktivieren Sie seinen Autostart beim Boot.

systemctl start php-fpm.service  
systemctl enable php-fpm.service

Fazit

Sie haben nun einen Apache-Server, der mit dem Verkehr viel besser skaliert. Denken Sie jedoch daran, dass Sie die Standardeinstellungen verwenden, also das, was für die meisten Leute „am besten“ ist. Wenn Sie wirklich das Beste aus Ihrem HTTP-Server herausholen möchten, müssen Sie sich über verschiedene Variablen informieren, die Sie anpassen können. Die richtigen Werte dafür hängen stark von den Ressourcen Ihres Servers, dem erwarteten Verkehr und der PHP-Anwendung ab.