Website-Suche

So führen Sie mehrere Websites mit unterschiedlichen PHP-Versionen in Nginx aus


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, d. h. Nginx, ausführen können.

In diesem Tutorial erklären wir Ihnen, wie Sie mehrere Versionen von PHP installieren und den Webserver Nginx für die Zusammenarbeit mit ihnen über die Serverblöcke (virtuelle Hosts in Apache) konfigurieren CentOS/RHEL 7-Distributionen mit LEMP-Stack.

Lesen Sie auch: Pyenv – Installieren Sie mehrere Python-Versionen für ein bestimmtes Projekt

Nginx verwendet PHP-FPM (steht für FastCGI Process Manager), was bei einigen eine alternative PHP FastCGI-Implementierung ist zusätzliche, nützliche Funktionen für stark ausgelastete Websites.

Einrichtung der Testumgebung

  1. Ein CentOS 7- oder RHEL 7-Server mit minimaler Installation.
  2. Nginx HTTP-Server.
  3. PHP 7.1 (als Standardversion zu verwenden) und 5.6.
  4. MariaDB-Datenbankserver.
  5. Server-IP-Adresse: 192.168.56.10.
  6. 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 von PHP bereitstellt Stack auf CentOS/RHEL 7-Distributionen.

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 zur Aktivierung verwendet wird oder Yum-Repositorys auf dem System deaktivieren.

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: Nginx-Webserver installieren

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 Distribution 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 wie gezeigt mit dem Yum-Paketmanager-Tool 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 Distribution 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-Repo hinzugefügt wurde, können Sie MariaDB wie gezeigt mit dem Paketmanager-Tool yum 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, antworten Sie mit y und drücken Sie [Enter] für die restlichen folgenden Fragen, um die Remote-Root-Benutzeranmeldung zu deaktivieren, anonyme Benutzerkonten zu entfernen und die Datenbank zu testen Standardmäßig können alle Benutzer darauf zugreifen, auch anonyme Benutzer.

mysql_secure_installation

Lesen Sie auch: 12 MySQL/MariaDB-Sicherheits-Best Practices für Linux

Schritt 4: Mehrere PHP-Versionen installieren

8. Um verschiedene PHP-Versionen für Ihre Projekte zu installieren, verwenden Sie den Befehl yum-config-manager, um mehrere PHP-Versionen 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. Sobald PHP installiert ist, können Sie den folgenden Befehl verwenden, um die auf Ihrem Server verwendete Standardversion von PHP zu überprüfen.

php -v

Schritt 5: Konfigurieren von PHP-FPM und PHP56-PHP-FPM

10. Dies ist der interessanteste Teil dieses Tutorials. Er 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.

Dies sind die folgenden zwei 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 Dateien oben und 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 den address:port, auf dem 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 beim Starten der zweiten Instanz von PHP, php56-php-fpm, Fehler auftreten, könnte eine SELinux-Richtlinie blockieren es von Anfang an. Wenn sich SELinux im erzwingenden Modus befindet, stellen Sie es auf den permissiven Modus ein 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 Websites erstellen. Sie müssen außerdem wie folgt Verzeichnisse zum Speichern von Protokollen 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 Besitzrechte 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: Richten Sie Nginx-Serverblöcke für Websites ein

15. Konfigurieren Sie nun mithilfe der Serverblock-Konfigurationsdateien, die sich in /etc/nginx/conf.d/ befinden sollten, wie Nginx Anfragen an Ihre Websites verarbeitet.

Erstellen Sie die Konfigurationsdateien für Ihre Websites mit der Erweiterung .conf.

vi /etc/nginx/conf.d/example1.com.conf
vi /etc/nginx/conf.d/example2.com.conf

Fügen Sie dann die folgenden Serverblockkonfigurationen in die entsprechenden Dateien ein.

Website 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;

        }
}

Website 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 sich im abschließenden Teil des http-Blocks in /etc/nginx/nginx.conf die folgende Zeile befindet. 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. Abschließend müssen Sie testen, ob Ihr Server die beiden PHP-Versionen verwendet. Sie können wie gezeigt ein sehr einfaches info.php-Skript in den Dokumentstammverzeichnissen Ihrer Websites erstellen.

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- neu starten. fpm. Sie können jedoch zunächst die Nginx-Konfigurationsdateien auf Syntaxfehler überprüfen, bevor Sie dies tun.

nginx -t 
systemctl restart nginx php-fpm php56-php-fpm

19. Es gibt noch eine weitere letzte Sache, die Sie tun müssen, insbesondere wenn Sie Ihren Server lokal betreiben: Sie müssen lokales DNS mithilfe der Datei /etc/hosts einrichten, wie in der Abbildung gezeigt Screenshot unten.

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 ist es! Jetzt können Sie Dateien bereitstellen und Websites mit verschiedenen PHP-Versionen testen. Wenn Sie Ergänzungen vornehmen oder Fragen stellen möchten, nutzen Sie das Kommentarformular unten.