Cum să rulați mai multe site-uri web cu diferite versiuni PHP în Nginx


Uneori, dezvoltatorii PHP doresc să construiască și să ruleze diferite site-uri/aplicații folosind versiuni diferite de PHP pe același server web. În calitate de administrator de sistem Linux, trebuie să configurați un mediu în care puteți rula mai multe site-uri web folosind diferite versiuni PHP pe un singur server web, adică Nginx.

În acest tutorial, vă vom explica cum să instalați mai multe versiuni de PHP și să configurați serverul web Nginx pentru a lucra cu ele prin intermediul blocurilor de server (gazde virtuale în Apache) în Distribuții CentOS/RHEL 7 folosind stiva LEMP.

Citiți și: Pyenv – Instalați mai multe versiuni Python pentru un anumit proiect

Nginx folosește PHP-FPM (abreviat pentru FastCGI Process Manager), care este o implementare alternativă a PHP FastCGI cu unele caracteristici suplimentare utile pentru site-urile web cu încărcare intensă.

Configurarea mediului de testare

  1. Un server CentOS 7 sau RHEL 7 cu instalare minimă.
  2. Server HTTP Nginx.
  3. PHP 7.1 (pentru a fi folosit ca versiune implicită) și 5.6.
  4. Server de baze de date MariaDB.
  5. Adresa IP a serverului: 192.168.56.10.
  6. Site-uri web: example1.com și example2.com.

Pasul 1: Instalarea și activarea EPEL și Remi Repository

1. Începeți mai întâi prin instalarea și activarea depozitelor EPEL și Remi, care oferă cele mai recente versiuni ale PHP stiva pe distribuțiile CentOS/RHEL 7.

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. Apoi instalați pachetul yum-utils, care extinde funcționalitățile native ale lui yum și oferă comanda yum-config-manager, care este folosită pentru a activa sau dezactivați depozitele Yum din sistem.

yum install yum-utils

Notă: pe RHEL 7 puteți activa canalul opțional pentru unele dependențe folosind următoarea comandă.

subscription-manager repos --enable=rhel-7-server-optional-rpms

Pasul 2: Instalarea serverului web Nginx

3. Pentru a instala cea mai recentă versiune de Nginx, trebuie să adăugăm depozitul oficial Nginx, să creăm un fișier numit /etc/yum.repos.d/nginx.repo.

vi /etc/yum.repos.d/nginx.repo

Adăugați următoarele rânduri la fișier conform distribuției dvs.

--------------- 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. După ce nginx repo a fost adăugat, puteți instala Nginx folosind instrumentul de gestionare a pachetelor yum, așa cum se arată.

yum install nginx

Pasul 3: Instalarea serverului de bază de date MariaDB

5. Pentru a instala cea mai recentă versiune de MariaDB, trebuie să adăugăm depozitul oficial MariaDB, să creăm un fișier numit /etc/yum.repos.d/mariadb.repo.

vi /etc/yum.repos.d/mariadb.repo

Adăugați următoarele rânduri la fișier conform distribuției dvs.

--------------- 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. După ce a fost adăugat depozitul MariaDB, puteți instala MariaDB folosind instrumentul de gestionare a pachetelor yum, așa cum se arată.

yum install MariaDB-client MariaDB-server

7. Apoi, asigurați instalarea serverului de baze de date utilizând scriptul de mai jos. Setați o parolă root și răspundeți la y și apăsați pe [Enter] pentru restul întrebărilor ulterioare pentru a dezactiva conectarea la distanță a utilizatorului root, a elimina conturile de utilizator anonim și a testa baza de date care, prin implicit poate fi accesat de toți utilizatorii, chiar și de utilizatorii anonimi.

mysql_secure_installation

Citiți și: 12 cele mai bune practici de securitate MySQL/MariaDB pentru Linux

Pasul 4: Instalarea mai multor versiuni de PHP

8. Pentru a instala diferite versiuni de PHP pentru proiectele dvs., utilizați comanda yum-config-manager pentru a instala mai multe versiuni de PHP împreună cu majoritatea modulelor necesare, așa cum se arată.

Instalați versiunea PHP 7.1

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

Instalați versiunea PHP 5.6

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. Odată instalat PHP, puteți utiliza următoarea comandă pentru a verifica versiunea implicită de PHP folosită pe serverul dvs.

php -v

Pasul 5: Configurarea PHP-FPM și PHP56-PHP-FPM

10. Aceasta este cea mai interesantă parte a acestui tutorial, care explică cum puteți rula mai multe versiuni PHP pe serverul dvs. Aici, veți configura diferitele versiuni de php-fpm cu care va funcționa Nginx. Ar trebui să definiți utilizatorul/grupul de procese FastCGI, precum și porturile pe care vor asculta.

Acestea sunt următoarele două fișiere de configurare pe care le veți edita.

  • php-fpm (implicit 7.1) – /etc/php-fpm.d/www.conf
  • php56-php-fpm – /opt/remi/php56/root/etc/php-fpm.d/www.conf

Deschideți fișierele de mai sus, setați utilizatorul/grupul de procese FastCGI.

vi /etc/php-fpm.d/www.conf   [PHP 7.1]
vi /opt/remi/php56/root/etc/php-fpm.d/www.conf  [PHP 5.6] 

Valorile implicite ar trebui să fie apache, schimbați-le în nginx după cum se arată.

user = nginx
group = nginx

11. Apoi, găsiți parametrii de ascultare și definiți adresa:port pe care vor fi primite solicitările FastCGI.

listen = 127.0.0.1:9000	[php-fpm]
listen = 127.0.0.1:9001	[php56-php-fpm]

12. Odată finalizată toate configurațiile de mai sus, trebuie să porniți și să activați Nginx, MariaDB și PHP-FPM pentru a porni automat la pornirea sistemului.

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 

Atenție: în cazul în care primiți erori la pornirea celei de-a doua instanțe PHP, php56-php-fpm, o politică SELinux ar putea fi blocată ea de la pornire. Dacă SELinux este în modul de aplicare, setați-l pe modul permisiv, apoi încercați să porniți din nou serviciul.

getenforce
setenforce 0 

Pasul 6: Configurați site-uri web cu permisiuni

13. În acest moment, acum puteți crea directoarele necesare pentru site-urile dvs. web sub /var/www/html/. De asemenea, trebuie să creați directoare pentru a stoca jurnalele, după cum urmează:

---------------- 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. Setați permisiunile de proprietate corespunzătoare pentru toate directoarele.

---------------- 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/

Pasul 7: Configurați blocurile serverului Nginx pentru site-uri web

15. Acum configurați modul în care Nginx va procesa cererile către site-urile dvs. web utilizând fișierele de configurare a blocurilor de server care ar trebui să fie localizate în /etc/nginx/conf.d/.

Creați fișierele de configurare pentru site-urile dvs. web care se termină cu extensia .conf.

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

Apoi lipiți următoarele configurații de bloc de server în fișierele respective.

Site-ul web 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;

        }
}

Site-ul web 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. Asigurați-vă că aveți următoarea linie în partea de închidere a blocului http în /etc/nginx/nginx.conf. Vă ajută să includeți toate fișierele de configurare în directorul /etc/nginx/conf.d/ când Nginx rulează.

include /etc/nginx/conf.d/*.conf;

Pasul 8: Testarea diferitelor versiuni PHP

17. În cele din urmă, trebuie să testați dacă serverul dvs. utilizează cele două versiuni de PHP. Puteți crea un script de bază info.php în directoarele rădăcină de documente ale site-urilor dvs. web, așa cum se arată.

echo "<?php phpinfo(); ?>" > /var/www/html/example1.com/info.php
echo "<?php phpinfo(); ?>" > /var/www/html/example2.com/info.php

18. Pentru a aplica toate modificările pe care le-ați făcut mai sus, trebuie să reporniți Nginx, php-fpm și php56-php- fpm. Dar înainte de toate puteți verifica dacă fișierele de configurare Nginx prezintă erori de sintaxă înainte de a face acest lucru.

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

19. Mai este un ultim lucru de făcut, mai ales dacă rulați serverul local, trebuie să configurați DNS local folosind fișierul /etc/hosts așa cum se arată în captură de ecran de mai jos.

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. În cele din urmă, deschideți un browser web și introduceți următoarele adrese pentru a verifica versiunile de PHP instalate în sistem.

http://example1.com/index.php
http://example2.com/index.php

Asta este! Acum puteți implementa fișiere și puteți testa site-uri web cu diferite versiuni PHP. Dacă aveți completări de făcut sau întrebări de pus, folosiți formularul de comentarii de mai jos.