Der Autor hat den COVID-19 Relief Fund dazu ausgewählt, eine Spende im Rahmen des Programms Write for DOnations zu erhalten.
Der Apache-Webserver verwendet virtuelle Hosts zur Verwaltung mehrerer Domänen auf einer einzigen Instanz. In ähnlicher Weise verwendet PHP-FPM einen Daemon, um mehrere PHP-Versionen auf einer einzigen Instanz zu verwalten. Zusammen können Sie Apache und PHP-FPM verwenden, um mehrere PHP-Webanwendungen zu hosten, von denen jede eine andere Version von PHP verwendet, alle auf dem gleichen Server und alle zur gleichen Zeit. Dies ist nützlich, da verschiedene Anwendungen möglicherweise verschiedene Versionen von PHP erfordern, aber einige Server-Stacks, wie ein herkömmlich konfigurierter LAMP-Stack, nur einen verwalten können. Die Kombination von Apache mit PHP-FPM ist auch eine kosteneffizientere Lösung als das Hosting jeder Anwendung auf ihrer eigenen Instanz.
PHP-FPM bietet auch Konfigurationsoptionen für stderr
- und stdout
-Protokollierung, Notfall-Neustarts und adaptives Prozess-Spawning, was bei stark ausgelasteten Sites nützlich ist. Tatsächlich ist der Einsatz von Apache mit PHP-FPM einer der besten Stacks für das Hosting von PHP-Anwendungen, insbesondere, wenn es um die Leistung geht.
In diesem Tutorial richten Sie zwei PHP-Sites auf einer einzigen Instanz ein. Jede Site verwendet ihre eigene Domäne und jede Domäne stellt ihre eigene PHP-Version bereit. Die erste, site1.your_domain
, stellt PHP 7.0 bereit. Die zweite, site2.your_domain
, stellt PHP 7.2 bereit.
A
-Datensatz in unseren DNS-Einstellungen angegeben sind: site1.your_domain
und site2.your_domain
.Nachdem die Voraussetzungen erfüllt sind, installieren Sie nun PHP-Versionen 7.0 und 7.2 sowie PHP-FPM als auch mehrere zusätzliche Erweiterungen. Dazu müssen Sie jedoch zunächst das sury php
-Repository zu Ihrem System hinzufügen.
Installieren Sie zunächst mehrere erforderliche Pakete, einschließlich curl
, wget
und gnupg2
:
- sudo apt-get install curl wget gnupg2 ca-certificates lsb-release apt-transport-https -y
Mit den obigen Paketen können Sie sicher auf das sury php
-Repository zugreifen. sury php
ist ein Drittanbieter-Repository oder PPA (Personal Package Archive). Es stellt PHP 7.4, 7.3, 7.2, 7.1 und 7.0 für das Debian-Betriebssystem bereit. Außerdem bietet es aktuellere Versionen von PHP als die offiziellen Debian 10-Repositorys und Sie können verschiedene Versionen von PHP im gleichen System installieren.
Als Nächstes importieren Sie den Schlüssel des Pakets:
- wget https://packages.sury.org/php/apt.gpg
- sudo apt-key add apt.gpg
Fügen Sie nun das Repository sury php
Ihrem System hinzu:
- echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php7.list
Aktualisieren Sie das Repository:
- sudo apt-get update -y
Installieren Sie als Nächstes php7.0
, php7.0-fpm
, php7.0-mysql
, libapache2-mod-php7.0
, und libapache2-mod-fcgid
mit den folgenden Befehlen:
- sudo apt-get install php7.0 php7.0-fpm php7.0-mysql libapache2-mod-php7.0 libapache2-mod-fcgid -y
php7.0
ist ein Metapaket zur Ausführung von PHP-Anwendungen.php7.0-fpm
bietet den Fast Process Manager-Interpreter, der als Daemon ausgeführt wird und Fast/CGI-Anfragen empfängt.php7.0-mysql
verbindet PHP mit der MySQL-Datenbank.libapahce2-mod-php7.0
stellt das PHP-Modul für den Apache-Webserver bereit.libapache2-mod-fcgid
enthält eine mod_fcgid, die eine Reihe von CGI-Programminstanzen startet, um gleichzeitige Anfragen zu bearbeiten.Wiederholen Sie den Vorgang für PHP-Version 7.2. Installieren Sie php7.2
, php7.2-fpm
, php7.2-mysql
und libapache2-mod-php7.2
.
- sudo apt-get install php7.2 php7.2-fpm php7.2-mysql libapache2-mod-php7.2 -y
Starten Sie nach Installation beider PHP-Versionen den Dienst php7.0-fpm
:
- sudo systemctl start php7.0-fpm
Überprüfen Sie als Nächstes den Status des php7.0-fpm
-Dienstes:
- sudo systemctl status php7.0-fpm
Sie sehen die folgende Ausgabe:
Output● php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-04-04 08:51:47 UTC; 1min 17s ago
Docs: man:php-fpm7.0(8)
Main PID: 13016 (php-fpm7.0)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 1149)
Memory: 19.1M
CGroup: /system.slice/php7.0-fpm.service
├─13016 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
├─13017 php-fpm: pool www
└─13018 php-fpm: pool www
Apr 04 08:51:47 debian10 systemd[1]: Starting The PHP 7.0 FastCGI Process Manager...
Apr 04 08:51:47 debian10 systemd[1]: Started The PHP 7.0 FastCGI Process Manager.
Wiederholen Sie diesen Vorgang nun zum Starten des php7.2-fpm
-Dienstes:
- sudo systemctl start php7.2-fpm
Und überprüfen Sie dann den Status des php7.2-fpm
-Dienstes:
- sudo systemctl status php7.2-fpm
Sie sehen die folgende Ausgabe:
Output● php7.2-fpm.service - The PHP 7.2 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-04-04 08:52:52 UTC; 1min 32s ago
Docs: man:php-fpm7.2(8)
Process: 22207 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/7.2/fpm/pool.d/www.conf 72 (code=exite
Main PID: 22204 (php-fpm7.2)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 1149)
Memory: 12.0M
CGroup: /system.slice/php7.2-fpm.service
├─22204 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
├─22205 php-fpm: pool www
└─22206 php-fpm: pool www
Apr 04 08:52:52 debian10 systemd[1]: Starting The PHP 7.2 FastCGI Process Manager...
Apr 04 08:52:52 debian10 systemd[1]: Started The PHP 7.2 FastCGI Process Manager.
Abschließend müssen Sie mehrere Module aktivieren, damit Ihr Apache2-Dienst mit mehreren PHP-Versionen arbeiten kann:
- sudo a2enmod actions fcgid alias proxy_fcgi
actions
wird für die Ausführung von CGI-Skripten verwendet, die auf Medientyp oder Anfragemethode basieren.
fcgid
ist eine hochleistungsfähige Alternative zu mod_cgi
, die eine ausreichende Anzahl von Instanzen des CGI-Programms zur Bearbeitung simultaner Anfragen startet.
alias
stellt die Abbildung verschiedener Teile des Host-Dateisystems im Dokumentenbaum bereit und dient der URL-Umleitung.
proxy_fcgi
ermöglicht Apache die Weiterleitung von Anfragen an PHP-FPM.
Starten Sie nun den Apache-Dienst neu, um Ihre Änderungen zu übernehmen:
- sudo systemctl restart apache2
Zu diesem Zeitpunkt haben Sie zwei PHP-Versionen auf Ihrem Server installiert. Als Nächstes erstellen Sie eine Verzeichnisstruktur für jede Website, die Sie bereitstellen möchten.
In diesem Abschnitt erstellen Sie für beide Websites ein Dokumentenverzeichnis und eine Indexseite.
Erstellen Sie zunächst Dokument-Stammverzeichnisse sowohl für site1.your_domain
als auch für site2.your_domain
:
- sudo mkdir /var/www/site1.your_domain
- sudo mkdir /var/www/site2.your_domain
Standardmäßig wird der Apache-Webserver als Benutzer www-data
und als Gruppe www-data
ausgeführt. Um sicherzustellen, dass Sie über die korrekte Eigentümerschaften und Berechtigungen für die Stammverzeichnisse Ihrer Website verfügen, führen Sie die folgenden Befehle aus:
- sudo chown -R www-data:www-data /var/www/site1.your_domain
- sudo chown -R www-data:www-data /var/www/site2.your_domain
- sudo chmod -R 755 /var/www/site1.your_domain
- sudo chmod -R 755 /var/www/site2.your_domain
Erstellen Sie als Nächstes in jedem Stammverzeichnis Ihrer Website eine Datei info.php
. Dadurch werden die PHP-Version jeder Website angezeigt. Beginnen Sie mit site1
:
- sudo nano /var/www/site1.your_domain/info.php
Fügen Sie die folgende Zeile hinzu:
<?php phpinfo(); ?>
Speichern und schließen Sie die Datei. Kopieren Sie nun die von Ihnen erstellte Datei info.php
nach site2
:
- sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php
Ihr Webserver sollte nun über die Stammverzeichnisse der Dokumente verfügen, die jede Site benötigt, um Besuchern Daten zur Verfügung zu stellen. Als Nächstes konfigurieren Sie Ihren Apache-Webserver, um mit zwei verschiedenen PHP-Versionen zu arbeiten.
In diesem Abschnitt erstellen Sie zwei Konfigurationsdateien für virtuelle Hosts. Dadurch können Ihre beiden Websites gleichzeitig mit zwei verschiedenen PHP-Versionen arbeiten.
Damit Apache diesen Inhalt bereitstellen kann, ist es erforderlich, eine virtuelle Host-Datei mit den richtigen Anweisungen zu erstellen. Anstatt die Standardkonfigurationsdatei unter /etc/apache2/sites-available/000-default.conf
zu ändern, erstellen Sie zwei neue in dem Verzeichnis /etc/apache2/sites-available
.
Erstellen Sie zunächst eine neue Konfigurationsdatei für einen virtuellen Host für die Website site1.your_domain
. Hier weisen Sie Apache an, Inhalte mit php7.0
zu rendern:
- sudo nano /etc/apache2/sites-available/site1.your_domain.conf
Fügen Sie folgenden Inhalt hinzu: Stellen Sie sicher, dass der Website-Verzeichnispfad, der Servername und die PHP-Version mit Ihrer Einrichtung übereinstimmen:
<VirtualHost *:80>
ServerAdmin admin@site1.your_domain
ServerName site1.your_domain
DocumentRoot /var/www/site1.your_domain
DirectoryIndex info.php
<Directory /var/www/site1.your_domain>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
<FilesMatch \.php$>
# For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/site1.your_domain_error.log
CustomLog ${APACHE_LOG_DIR}/site1.your_domain_access.log combined
</VirtualHost>
In dieser Datei haben Sie die DocumentRoot
auf Ihr neues Verzeichnis und ServerAdmin
auf eine E-Mail aktualisiert, auf die der Administrator der Website your_domain
zugreifen kann. Weiterhin haben Sue ServerName
aktualisiert, der die Basisdomäne für diese Konfiguration des virtuellen Hosts festlegt, und Sie haben eine Anweisung SetHandler
hinzugefügt, um PHP als fastCGI-Prozessserver auszuführen.
Speichern und schließen Sie die Datei.
Erstellen Sie als Nächstes eine neue Konfigurationsdatei des virtuellen Hosts für die Website site2.your_domain
. Sie geben diese Subdomäne für die Bereitstellung von php7.2
an:
- sudo nano /etc/apache2/sites-available/site2.your_domain.conf
Fügen Sie folgenden Inhalt hinzu: Stellen Sie auch hier sicher, dass der Website-Verzeichnispfad, der Servername und die PHP-Version mit Ihrer Einrichtung übereinstimmen:
<VirtualHost *:80>
ServerAdmin admin@site2.your_domain
ServerName site2.your_domain
DocumentRoot /var/www/site2.your_domain
DirectoryIndex info.php
<Directory /var/www/site2.your_domain>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
<FilesMatch \.php$>
# For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/site2.your_domain_error.log
CustomLog ${APACHE_LOG_DIR}/site2.your_domain_access.log combined
</VirtualHost>
Wenn Sie fertig sind, speichern und schließen Sie die Datei. Überprüfen Sie anschließend die Apache-Konfigurationsdatei auf etwaige Syntaxfehler:
- sudo apachectl configtest
Sie sehen die folgende Ausgabe:
OutputSyntax OK
Aktivieren Sie dann beide Konfigurationsdateien des virtuellen Hosts:
- sudo a2ensite site1.your_domain
- sudo a2ensite site2.your_domain
Deaktivieren Sie nun die Standardseite, da Sie sie nicht benötigen:
- sudo a2dissite 000-default.conf
Starten Sie schließlich den Apache-Dienst neu, um Ihre Änderungen zu übernehmen:
- sudo systemctl restart apache2
Nachdem Sie Apache nun konfiguriert haben, um jede Site zu bedienen, werden Sie sie testen, um sicherzustellen, dass die richtigen PHP-Versionen ausgeführt werden.
Zu diesem Zeitpunkt haben Sie zwei Websites konfiguriert, um zwei verschiedene PHP-Versionen auszuführen. Testen Sie nun die Ergebnisse.
Öffnen Sie Ihren Webbrowser und besuchen Sie beide Sites http://site1.your_domain
und http://site2.your_domain
. Sie sehen zwei Seiten, die wie folgt aussehen:
Beachten Sie die Titel. Die erste Seite zeigt an, dass site1.your_domain
PHP-Version 7.0 bereitstellt. Die zweite zeigt an, dass site2.your_domain
PHP-Version 7.2 bereitstellt.
Nachdem Sie nun Ihre Sites getestet haben, entfernen Sie die Dateien info.php
. Da sie sensible Informationen über Ihren Server enthalten und für unberechtigte Benutzer zugänglich sind, stellen sie eine Sicherheitsbedrohung dar. Führen Sie zur Entfernung beider Dateien die folgenden Befehle aus:
- sudo rm -rf /var/www/site1.your_domain/info.php
- sudo rm -rf /var/www/site2.your_domain/info.php
Jetzt verfügen Sie über einen einzelnen Debian 10-Server, der zwei Websites mit zwei verschiedenen PHP-Versionen handhabt. PHP-FPM ist jedoch nicht auf diese eine Anwendung beschränkt.
Sie haben nun virtuelle Hosts und PHP-FPM kombiniert, um mehrere Websites und mehrere PHP-Versionen auf einem einzigen Server bereitzustellen. Die einzige praktische Beschränkung der Anzahl der PHP-Sites und PHP-Versionen, die Ihr Apache-Dienst verarbeiten kann, ist die Verarbeitungsleistung Ihrer Instanz.
Von hier aus können Sie die fortgeschritteneren Funktionen von PHP-FPM erkunden, wie den adaptiven Spawning-Prozess oder wie sdtout
und stderr
protokolliert werden können. Alternativ können Sie jetzt auch Ihre Websites sichern. Zu diesem Zweck können Sie unserem Tutorial zum Sichern Ihrer Sites mit kostenlosen TLS/SSL-Zertifikaten von Let’s Encrypt folgen.
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!