So betreiben Sie mehrere Websites mit unterschiedlichen PHP-Versionen in Nginx
Manchmal möchten PHP-Entwickler verschiedene Websites/Anwendungen mit unterschiedlichen PHP-Versionen auf demselben Webserver erstellen und ausführen. Als Linux-Systemadministrator müssen Sie eine Umgebung einrichten, in der Sie mehrere Websites mit unterschiedlichen PHP-Versionen auf einem einzigen Webserver, z. B. Nginx, ausführen können.
In diesem Tutorial erklären wir Ihnen, wie Sie mehrere Versionen von PHP installieren und den Webserver Nginx so konfigurieren, dass er über die Serverblöcke (virtuelle Hosts in Apache) in CentOS/RHEL 7-Distributionen mit LEMP-Stack mit ihnen arbeitet.
Lesen Sie auch: Pyenv – Installieren Sie mehrere Python-Versionen für ein bestimmtes Projekt
Nginx verwendet PHP-FPM (steht für FastCGI Process Manager), eine alternative PHP FastCGI-Implementierung mit einigen zusätzlichen, nützlichen Funktionen für stark ausgelastete Websites.
Einrichtung der Testumgebung
- Ein CentOS 7- oder RHEL 7-Server mit minimaler Installation.
- Nginx HTTP-Server.
- PHP 7.1 (als Standardversion zu verwenden) und 5.6.
- MariaDB-Datenbankserver.
- IP-Adresse des Servers: 192.168.56.10.
- Websites: example1.com und example2.com.
Schritt 1: Installieren und Aktivieren von EPEL und Remi Repository
1. Beginnen Sie zunächst mit der Installation und Aktivierung des EPEL- und Remi-Repositorys, das die neuesten Versionen des PHP-Stacks auf CentOS/RHEL 7-Distributionen bietet.
# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
2. Als nächstes installieren Sie das Paket yum-utils, das die nativen Funktionen von yum erweitert und den Befehl yum-config-manager bereitstellt, der zum Aktivieren oder Deaktivieren von Yum-Repositories auf dem System verwendet wird.
# yum install yum-utils
Hinweis: Unter RHEL 7 können Sie den optionalen Kanal für einige Abhängigkeiten mit dem folgenden Befehl aktivieren.
# subscription-manager repos --enable=rhel-7-server-optional-rpms
Schritt 2: Installation des Nginx-Webservers
3. Um die neueste Version von Nginx zu installieren, müssen wir das offizielle Nginx-Repository hinzufügen und eine Datei mit dem Namen /etc/yum.repos.d/nginx.repo erstellen.
# vi /etc/yum.repos.d/nginx.repo
Fügen Sie die folgenden Zeilen gemäß Ihrer Verteilung zur Datei hinzu.
--------------- On CentOS 7 ---------------
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
--------------- On RHEL 7 ---------------
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/7.x/$basearch/
gpgcheck=0
enabled=1
4. Sobald das nginx-Repository hinzugefügt wurde, können Sie Nginx mit dem yum-Paketmanager-Tool wie gezeigt installieren.
# yum install nginx
Schritt 3: Installation des MariaDB-Datenbankservers
5. Um die neueste Version von MariaDB zu installieren, müssen wir das offizielle MariaDB-Repository hinzufügen und eine Datei mit dem Namen /etc/yum.repos.d/mariadb.repo erstellen.
# vi /etc/yum.repos.d/mariadb.repo
Fügen Sie die folgenden Zeilen gemäß Ihrer Verteilung zur Datei hinzu.
--------------- On CentOS 7 ---------------
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
--------------- On RHEL 7 ---------------
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/rhel7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
6. Sobald das MariaDB-Repository hinzugefügt wurde, können Sie MariaDB mit dem yum-Paketmanager-Tool wie gezeigt installieren.
# yum install MariaDB-client MariaDB-server
7. Sichern Sie anschließend die Installation des Datenbankservers mit dem folgenden Skript. Legen Sie ein Root-Passwort fest und antworten Sie mit y und drücken Sie [Enter] für den Rest der folgenden Fragen, um die Remote-Root-Benutzeranmeldung zu deaktivieren, anonyme Benutzerkonten zu entfernen und die Datenbank zu testen, auf die standardmäßig alle Benutzer zugreifen können, auch anonyme Benutzer.
# mysql_secure_installation
Lesen Sie auch: 12 Best Practices für MySQL/MariaDB-Sicherheit für Linux
Schritt 4: Installation mehrerer PHP-Versionen
8. Um verschiedene Versionen von PHP für Ihre Projekte zu installieren, verwenden Sie den Befehl yum-config-manager, um mehrere Versionen von PHP zusammen mit den meisten erforderlichen Modulen zu installieren, wie gezeigt.
Installieren Sie die PHP 7.1 Version
# yum-config-manager --enable remi-php71 [Default]
yum install php php-common php-fpm
yum install php-mysql php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml php-pecl-apc php-cli php-pear php-pdo
Installieren Sie die PHP 5.6 Version
# yum install php56 php56-php-common php56-php-fpm
yum install php56-php-mysql php56-php-pecl-memcache php56-php-pecl-memcached php56-php-gd php56-php-mbstring php56-php-mcrypt php56-php-xml php56-php-pecl-apc php56-php-cli php56-php-pear php56-php-pdo
9. Nach der Installation von PHP können Sie den folgenden Befehl verwenden, um die Standardversion von PHP zu überprüfen, die auf Ihrem Server verwendet wird.
# php -v
Schritt 5: PHP-FPM und PHP56-PHP-FPM konfigurieren
10. Dies ist der interessanteste Teil dieses Tutorials, es erklärt, wie Sie tatsächlich mehrere PHP-Versionen auf Ihrem Server ausführen können. Hier konfigurieren Sie die verschiedenen Versionen von php-fpm, mit denen Nginx arbeiten wird. Sie sollten den Benutzer/die Gruppe der FastCGI-Prozesse sowie die Ports definieren, auf denen sie lauschen werden.
Dies sind die folgenden beiden Konfigurationsdateien, die Sie bearbeiten werden.
- php-fpm (Standard 7.1) – /etc/php-fpm.d/www.conf
- php56-php-fpm – /opt/remi/php56/root/etc/php-fpm.d/www.conf
Öffnen Sie die obigen Dateien, legen Sie den Benutzer/die Gruppe der FastCGI-Prozesse fest.
# vi /etc/php-fpm.d/www.conf [PHP 7.1]
vi /opt/remi/php56/root/etc/php-fpm.d/www.conf [PHP 5.6]
Die Standardwerte sollten Apache sein, ändern Sie sie wie gezeigt in nginx.
user = nginx
group = nginx
11. Suchen Sie als Nächstes die Listen-Parameter und definieren Sie die Adresse:Port, an der FastCGI-Anfragen empfangen werden.
listen = 127.0.0.1:9000 [php-fpm]
listen = 127.0.0.1:9001 [php56-php-fpm]
12. Sobald alle oben genannten Konfigurationen abgeschlossen sind, müssen Sie Nginx, MariaDB und PHP-FPM starten und aktivieren, um beim Systemstart automatisch zu starten.
# systemctl enable nginx
systemctl start nginx
systemctl enable mariadb
systemctl start mariadb
---------------- PHP 7.1 ----------------
systemctl enable php-fpm
systemctl start php-fpm
---------------- PHP 5.6 ----------------
systemctl enable php56-php-fpm
systemctl start php56-php-fpm
Achtung: Falls Sie beim Starten der zweiten Instanz von PHP, php56-php-fpm, Fehler erhalten, könnte eine SELinux-Richtlinie den Start blockieren. Wenn sich SELinux im Erzwingungsmodus befindet, legen Sie es auf den permissiven Modus fest, und versuchen Sie dann erneut, den Dienst zu starten.
# getenforce
setenforce 0
Schritt 6: Websites mit Berechtigungen einrichten
13. An dieser Stelle können Sie nun unter /var/www/html/ die notwendigen Verzeichnisse für Ihre Webseiten anlegen. Sie müssen auch Verzeichnisse zum Speichern von Protokollen wie folgt erstellen:
---------------- Website 1 ----------------
mkdir -p /var/www/html/example1.com/
mkdir -p /var/log/nginx/example1.com/
---------------- Website 2 ----------------
mkdir -p /var/www/html/example2.com/
mkdir -p /var/log/nginx/example2.com/
14. Legen Sie die entsprechenden Besitzberechtigungen für alle Verzeichnisse fest.
---------------- Website 1 ----------------
chown -R root:nginx /var/www/html/example1.com/
chmod -R 755 /var/www/html/example1.com/
chown -R root:nginx /var/log/nginx/example1.com/
chmod -R 660 /var/log/nginx/example1.com/
---------------- Website 2 ----------------
chown -R root:nginx /var/www/html/example2.com/
chmod -R 755 /var/www/html/example2.com/
chown -R root:nginx /var/log/nginx/example2.com/
chmod -R 660 /var/log/nginx/example2.com/
Schritt 7: Nginx-Serverblöcke für Websites einrichten
15. Konfigurieren Sie nun, wie Nginx Anfragen an Ihre Websites verarbeitet, indem Sie die Konfigurationsdateien für Serverblöcke verwenden, die sich in /etc/nginx/conf.d/ befinden sollten.
Erstellen Sie die Konfigurationsdateien für Ihre Websites, die auf die Erweiterung .conf enden.
# vi /etc/nginx/conf.d/example1.com.conf
vi /etc/nginx/conf.d/example2.com.conf
Fügen Sie dann die folgenden Serverblock-Konfigurationen in die jeweiligen Dateien ein.
Webseite 1
server {
listen 80;
server_name example1.com www.example1.com;
root /var/www/html/example1.com/;
index index.php index.html index.htm;
#charset koi8-r;
access_log /var/log/nginx/example1.com/example1_access_log;
error_log /var/log/nginx/example1.com/example1_error_log error;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root /var/www/html/example1.com/;
fastcgi_pass 127.0.0.1:9000; #set port for php-fpm to listen on
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include /etc/nginx/fastcgi_params;
}
}
Webseite 2
server {
listen 80;
server_name example2.com www.example2.com;
root /var/www/html/example2.com/;
index index.php index.html index.htm;
#charset koi8-r;
access_log /var/log/nginx/example2.com/example2_access_log;
error_log /var/log/nginx/example2.com/example2_error_log error;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root /var/www/html/example2.com/;
fastcgi_pass 127.0.0.1:9001; #set port for php56-php-fpm to listen on
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include /etc/nginx/fastcgi_params;
}
}
16. Stellen Sie sicher, dass Sie die folgende Zeile im schließenden Teil des http-Blocks in /etc/nginx/nginx.conf haben. Es ist hilfreich, alle Konfigurationsdateien im Verzeichnis /etc/nginx/conf.d/ einzuschließen, wenn Nginx ausgeführt wird.
include /etc/nginx/conf.d/*.conf;
Schritt 8: Testen verschiedener PHP-Versionen
17. Schließlich müssen Sie testen, ob Ihr Server die beiden Versionen von PHP verwendet. Sie können ein sehr einfaches info.php-Skript in den Dokumentstammverzeichnissen Ihrer Websites erstellen, wie gezeigt.
# echo "<?php phpinfo(); ?>" > /var/www/html/example1.com/info.php
echo "<?php phpinfo(); ?>" > /var/www/html/example2.com/info.php
18. Um alle oben vorgenommenen Änderungen zu übernehmen, müssen Sie Nginx, php-fpm und php56-php-fpm neu starten. Bevor Sie dies tun, können Sie jedoch zunächst die Nginx-Konfigurationsdateien auf Syntaxfehler überprüfen.
# nginx -t
systemctl restart nginx php-fpm php56-php-fpm
19. Es gibt noch eine letzte Sache, die Sie tun müssen, insbesondere wenn Sie Ihren Server lokal betreiben, Sie müssen das lokale DNS mit der Datei /etc/hosts einrichten, wie im Screenshot unten gezeigt.
192.168.56.10 example1.com example1
192.168.56.10 example2.com example2
20. Öffnen Sie abschließend einen Webbrowser und geben Sie die folgenden Adressen ein, um die auf dem System installierten PHP-Versionen zu überprüfen.
http://example1.com/index.php
http://example2.com/index.php
Das wars! Jetzt können Sie Dateien bereitstellen und Websites mit verschiedenen PHP-Versionen testen. Wenn Sie Ergänzungen vornehmen oder Fragen stellen möchten, verwenden Sie bitte das untenstehende Kommentarformular.




