Ich habe kürzlich das EduExpression WordPress-Plugin für einen Kunden gekauft, um eine Prüfungssoftware einzurichten. Ich konnte das Plugin ohne große Probleme installieren und konfigurieren. Das Problem trat jedoch auf, als auf das Schüler-Login zugegriffen wurde – die Plug-in-Seite wurde leer, als der Schüler versuchte, eine Prüfung abzulegen. Nun, ich habe eine Unterstützung, oder? Ich habe das Support-Team kontaktiert und sie sagten, das Plugin funktioniert nicht mit PHP 7.1 und es unterstützt nur PHP 5.6. Das ist mein Fehler – weil ich meinen Server mit PHP 7.1 eingerichtet hatte und alle meine Client-Websites auf PHP 7.1 liefen. Damit EduExpression funktioniert, muss ich die PHP 5.6-Version einrichten. Ein Downgrade von PHP ist nie eine gute Option, aber ich musste dies tun, damit dieses Plugin für den Client funktioniert. Wie wäre es also, PHP 5.6 nur für eine bestimmte Domain einzurichten und den Rest auf PHP 7.1 laufen zu lassen? Nun, in diesem Tutorial erkläre ich, wie Sie mehrere Versionen der PHP-Umgebung einrichten und eine bestimmte Version von PHP mit einer bestimmten Domain in NGINX verknüpfen.
UmfeldBetriebssystem:CentOS 7, Webserver:Nginx, PHP:v7.1 (Standard), PHP FastCGI:PHP-FPM
Hinweis:Die obige Umgebung ist bereits eingerichtet und wird erfolgreich ausgeführt.
Schritt 1 :Mehrere Versionen von PHP installieren, dh PHPv5.6 zusammen mit PHP7.1
Hier verwende ich yum
Befehl, um mehrere Versionen von PHP zusammen mit den erforderlichen Modulen zu installieren, wie unten gezeigt:
Installieren der PHP5.6-Version
# yum install php56 php56-php-common 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
Installieren Sie PHP-FPM für die Version PHP 5.6
PHP auf Nginx funktioniert über PHP-FPM (FastCGI Process Manager). PHP-FPM ist eine alternative PHP-FastCGI-Implementierung mit einigen zusätzlichen Funktionen, die für Websites jeder Größe nützlich sind, insbesondere für stark frequentierte Websites.
# yum install php56-php-fpm
Nun, wir haben PHP 5.6 installiert, aber wir sollten sicherstellen, dass die Standardversion von PHP immer noch 7.1 ist.
# php -v PHP 7.1.22 (cli) (built: Sep 12 2018 07:22:13) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.1.22, Copyright (c) 1999-2018, by Zend Technologies
Konfiguriere PHP-FPM und PHP56-PHP-FPM
Der wichtigste Teil dieses Tutorials besteht darin, zwei verschiedene PHP-FPM für zwei PHP-Versionen zu konfigurieren. Hier werden wir zwei verschiedene Versionen von PHP-FPM konfigurieren, mit denen Nginx arbeiten wird. Die Hauptsache während der Konfiguration ist der Benutzer/die Gruppe von FastCGI-Prozessen und die Ports, auf denen sie lauschen.
PHP-FPM (Standard 7.1) Konfigurationsdatei/etc/php-fpm.d/www.conf
Stellen Sie sicher, dass der Benutzer/die Gruppe auf nginx
eingestellt ist (Standardwert ist Apache).
user = nginx group = nginx
Suchen Sie den Listen-Parameter und legen Sie ihn auf Port 9000 fest, auf dem FastCGI-Anfragen empfangen werden.
listen = 127.0.0.1:9000 [php-fpm]PHP56-PHP-FPM-Konfigurationsdatei
/opt/remi/php56/root/etc/php-fpm.d/www.conf
Stellen Sie sicher, dass der Benutzer/die Gruppe nginx
festgelegt hat (Standardwert ist Apache).
user = nginx group = nginx
Suchen Sie den Listen-Parameter und setzen Sie ihn auf Port 9001, auf dem FastCGI-Anfragen empfangen werden.
listen = 127.0.0.1:9001 [php56-php-fpm]
Aktivieren Sie PHP-FPM, PHP56-PHP-FPM und NGINX automatischer Start beim Systemstart auf CentOS 7
Nachdem Sie die obigen Konfigurationen abgeschlossen haben, müssen Sie PHP-FPM, PHP56-PHP-FPM und Nginx so aktivieren, dass sie beim Systemstart automatisch gestartet werden.
# systemctl enable nginx # systemctl enable php-fpm # systemctl enable php56-php-fpmSchalten Sie SELinux aus
#sudo setenforce 0
Domains mit entsprechendem PHP-FPM für PHP-Ausführungen konfigurieren
Öffnen Sie die entsprechende Domänenkonfigurationsdatei von Nginx (/etc/nginx/conf.d/
) und suchen Sie nach der Zeile fastcgi_pass
und ändern Sie es entsprechend, um die richtige PHP-Version zu verknüpfen, die es ausführen muss.
Domäne 1 Nginx-Konfigurationsdatei:/etc/nginx/conf.d/example1.conf
server { listen :80; server_name example1.com; server_name www.example1.com; root /home/example1/public_html; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?q=$uri$args; } location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; include fastcgi_params; } }
Nginx-Konfigurationsdatei für Domäne 2: /etc/nginx/conf.d/example2.conf
server { listen :80; server_name example2.com; server_name www.example2.com; root /home/example2/public_html; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?q=$uri$args; } location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9001; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; include fastcgi_params; } }
Überprüfen Sie die Nginx-Konfigurationsdateien auf Syntaxfehler, bevor Sie Nginx neu starten
# nginx -t
Starten Sie Nginx, PHP-fpm, PHp56-PHP-FPM neu
# systemctrl restart nginx, php-fpm php56-php-fpm
Testen Sie verschiedene PHP-Versionen für verschiedene Domains
Erstellen Sie verschiedene phpinfo
Dateien unter den zwei unterschiedlichen Domänen-Root-Verzeichnissen
# echo "<?php phpinfo(); ?>" > /home/example1/public_html/info.php # echo "<?php phpinfo(); ?>" > /home/example2/public_html/info.php
Öffnen Sie nun info.php
im Browser, um example1.com mit PHP 7.1 und example2.com mit PHP 5.6 zu überprüfen.
http://example1.com/info.php
http://example2.com/info.php
Das ist es! Ich habe gerade das EduExpression-Plugin auf example2.com bereitgestellt, das auf PHP 5.6 läuft.