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 Ondrej PHP
-Repository zu Ihrem System hinzufügen.
Führen Sie den Befehl apt-get
aus, um software-properties-common
zu installieren:
- sudo apt-get install software-properties-common -y
Das Paket software-properties-common
bietet das Befehlszeilenprogramm apt-add-repository
, das Sie zum Hinzufügen des PPA-Repository (Persönliches Paketarchiv) ondrej/php
verwenden.
Fügen Sie nun das Repository ondrej/php
zu Ihrem System hinzu. Das PPA ondrej/php
hat aktuellere Versionen von PHP als die offiziellen Repositorys von Ubuntu und ermöglicht Ihnen auch, mehrere PHP-Versionen im gleichen System zu installieren:
- sudo add-apt-repository ppa:ondrej/php
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.libapache2-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 Sun 2020-03-29 12:53:23 UTC; 15s ago
Docs: man:php-fpm7.0(8)
Process: 20961 ExecStopPost=/usr/lib/php/php-fpm-socket-helper remove /run/php/php-fpm.sock /etc/php/7.0/fpm/pool.d/www.conf 70 (code=exited,
Process: 20979 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/7.0/fpm/pool.d/www.conf 70 (code=exite
Main PID: 20963 (php-fpm7.0)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 1150)
CGroup: /system.slice/php7.0-fpm.service
├─20963 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
├─20977 php-fpm: pool www
└─20978 php-fpm: pool www
Wiederholen Sie diesen Vorgang nun zum Starten des php7.2-fpm
-Dienstes:
- sudo systemctl start php7.2-fpm
Und überprüfen Sie 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 Sun 2020-03-29 12:53:22 UTC; 45s ago
Docs: man:php-fpm7.2(8)
Main PID: 20897 (php-fpm7.2)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 1150)
CGroup: /system.slice/php7.2-fpm.service
├─20897 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
├─20909 php-fpm: pool www
└─20910 php-fpm: pool www
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 startet, um gleichzeitige Anfragen zu bearbeiten.
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-Versions-Informationen 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 Sie 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
Sie haben nun einen einzigen Ubuntu 18.04-Server, der zwei Websites mit zwei verschiedenen PHP-Versionen verwaltet. 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!
Under Ubuntu 22.04.1 LTS this does not work