Kaip Nginx paleisti kelias svetaines su skirtingomis PHP versijomis


Kartais PHP kūrėjai nori kurti ir paleisti skirtingas svetaines/programas naudodami skirtingas PHP versijas tame pačiame žiniatinklio serveryje. Kaip „Linux“ sistemos administratorius, turite nustatyti aplinką, kurioje galėtumėte paleisti kelias svetaines naudodami skirtingą PHP versiją viename žiniatinklio serveryje, t. y. Nginx.

Šioje mokymo programoje paaiškinsime, kaip įdiegti kelias PHP versijas ir sukonfigūruoti žiniatinklio serverį Nginx, kad jis veiktų su jomis per serverio blokus (virtualiuosius „Apache“ pagrindinius kompiuterius). CentOS/RHEL 7 platinimai naudojant LEMP krūvą.

Taip pat skaitykite: „Pyenv“ – įdiekite kelias „Python“ versijas konkrečiam projektui

Nginx naudoja PHP-FPM (reiškia FastCGI Process Manager), kuris yra alternatyvus PHP FastCGI diegimas su kai kuriais papildomos naudingos funkcijos labai apkrautoms svetainėms.

Bandymo aplinkos sąranka

  1. CentOS 7 arba RHEL 7 serveris su minimaliu diegimu.
  2. Nginx HTTP serveris.
  3. PHP 7.1 (bus naudojama kaip numatytoji versija) ir 5.6.
  4. MariaDB duomenų bazės serveris.
  5. Serverio IP adresas: 192.168.56.10.
  6. Svetainės: example1.com ir example2.com.

1 veiksmas: EPEL ir Remi saugyklos diegimas ir įgalinimas

1. Pirmiausia įdiekite ir įgalinkite EPEL ir Remi saugyklą, kurioje siūlomos naujausios PHP versijos. sukrauti CentOS/RHEL 7 platinimus.

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. Tada įdiekite paketą yum-utils, kuris išplečia vietines yum funkcijas ir suteikia komandą yum-config-manager, kuri naudojama įgalinti arba išjunkite sistemoje „Yum“ saugyklas.

yum install yum-utils

Pastaba: RHEL 7 galite įgalinti pasirenkamą kanalą kai kurioms priklausomybėms naudodami šią komandą.

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

2 veiksmas: „Nginx“ žiniatinklio serverio įdiegimas

3. Norėdami įdiegti naujausią „Nginx“ versiją, turime pridėti oficialią „Nginx“ saugyklą, sukurti failą pavadinimu /etc/yum.repos.d/nginx.repo.

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

Pridėkite šias eilutes prie failo pagal savo paskirstymą.

--------------- 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. Pridėję „nginx repo“, galite įdiegti „Nginx“ naudodami „yum“ paketų tvarkyklės įrankį, kaip parodyta.

yum install nginx

3 veiksmas: „MariaDB“ duomenų bazės serverio įdiegimas

5. Norėdami įdiegti naujausią MariaDB versiją, turime pridėti oficialią MariaDB saugyklą, sukurti failą pavadinimu /etc/yum.repos.d/mariadb.repo.

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

Pridėkite šias eilutes prie failo pagal savo paskirstymą.

--------------- 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. Pridėję „MariaDB“ repo, galite įdiegti „MariaDB“ naudodami „yum“ paketų tvarkyklės įrankį, kaip parodyta.

yum install MariaDB-client MariaDB-server

7. Po to apsaugokite duomenų bazės serverio diegimą naudodami toliau pateiktą scenarijų. Nustatykite pagrindinį slaptažodį ir atsakykite y ir paspauskite [Enter], kad pateiktumėte kitus klausimus, kad išjungtumėte nuotolinį root vartotojo prisijungimą, pašalintumėte anoniminių naudotojų paskyras ir patikrintumėte duomenų bazę, kuri pagal numatytuosius nustatymus gali pasiekti visi vartotojai, net ir anoniminiai.

mysql_secure_installation

Taip pat skaitykite: 12 „MySQL“/„MariaDB“ saugos geriausių praktikų, skirtų „Linux“.

4 veiksmas: kelių PHP versijų įdiegimas

8. Norėdami įdiegti skirtingas PHP versijas savo projektams, naudokite komandą yum-config-manager, kad įdiegtumėte kelias PHP versijas kartu su daugeliu reikalingų modulių, kaip parodyta.

Įdiekite PHP 7.1 versiją

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

Įdiekite PHP 5.6 versiją

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. Įdiegę PHP, galite naudoti šią komandą, kad patikrintumėte numatytąją jūsų serveryje naudojamą PHP versiją.

php -v

5 veiksmas: PHP-FPM ir PHP56-PHP-FPM konfigūravimas

10. Tai įdomiausia šios mokymo programos dalis, joje paaiškinama, kaip iš tikrųjų galite paleisti kelias PHP versijas savo serveryje. Čia sukonfigūruosite skirtingas php-fpm versijas, su kuriomis veiks „Nginx“. Turėtumėte apibrėžti FastCGI procesų vartotoją/grupę, taip pat prievadus, kurių jie klausys.

Tai yra du konfigūracijos failai, kuriuos ketinate redaguoti.

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

Atidarykite aukščiau esančius failus, nustatykite FastCGI procesų vartotoją/grupę.

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

Numatytosios reikšmės turėtų būti apache, pakeiskite jas į nginx, kaip parodyta.

user = nginx
group = nginx

11. Tada raskite klausymosi parametrus ir apibrėžkite adresas:prievadą, kuriuo bus gautos FastCGI užklausos.

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

12. Atlikę visą aukščiau nurodytą konfigūraciją, turite paleisti ir įjungti Nginx, MariaDB ir PHP-FPM automatiškai paleisti sistemos įkrovos metu.

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 

Dėmesio: jei paleidžiant antrąjį PHP egzempliorių atsiranda klaidų php56-php-fpm, gali būti, kad SELinux politika blokuoja tai nuo pradžios. Jei SELinux veikia pristatymo režimu, nustatykite jį į leidžiamąjį režimą, tada bandykite dar kartą paleisti paslaugą.

getenforce
setenforce 0 

6 veiksmas: nustatykite svetaines su leidimais

13. Šiuo metu galite sukurti reikalingus savo svetainių katalogus /var/www/html/. Taip pat turite sukurti katalogus žurnalams saugoti taip:

---------------- 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. Visuose kataloguose nustatykite atitinkamus nuosavybės teises.

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

7 veiksmas: nustatykite „Nginx“ serverio blokus svetainėms

15. Dabar sukonfigūruokite, kaip „Nginx“ apdoros jūsų svetainių užklausas naudodama serverio bloko konfigūracijos failus, kurie turėtų būti adresu /etc/nginx/conf.d/.

Sukurkite savo svetainių konfigūracijos failus, kurie baigiasi plėtiniu .conf.

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

Tada į atitinkamus failus įklijuokite šias serverio blokų konfigūracijas.

1 svetainė

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;

        }
}

2 svetainė

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. Įsitikinkite, kad /etc/nginx/nginx.conf baigiamojoje http bloko dalyje yra ši eilutė. Tai padeda įtraukti visus konfigūracijos failus į /etc/nginx/conf.d/ katalogą, kai veikia „Nginx“.

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

8 veiksmas: skirtingų PHP versijų testavimas

17. Galiausiai turite patikrinti, ar jūsų serveris naudoja dvi PHP versijas. Galite sukurti labai paprastą info.php scenarijų savo svetainių dokumentų šakniniuose kataloguose, kaip parodyta.

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

18. Norėdami pritaikyti visus anksčiau atliktus pakeitimus, turite iš naujo paleisti Nginx, php-fpm ir php56-php- fpm. Bet pirmiausia galite patikrinti, ar „Nginx“ konfigūracijos failuose nėra sintaksės klaidų prieš tai darydami.

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

19. Yra dar vienas paskutinis dalykas, kurį reikia padaryti, ypač jei serverį naudojate vietoje, turite nustatyti vietinį DNS naudodami failą /etc/hosts, kaip parodyta ekrano kopija žemiau.

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. Galiausiai atidarykite žiniatinklio naršyklę ir įveskite šiuos adresus, kad patikrintumėte sistemoje įdiegtas PHP versijas.

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

Viskas! Dabar galite įdiegti failus ir išbandyti svetaines su skirtingomis PHP versijomis. Jei turite kokių nors papildymų ar pateikti klausimų, naudokite toliau pateiktą komentarų formą.