Kako pokrenuti više web stranica s različitim PHP verzijama u Nginxu


Ponekad PHP programeri žele izgraditi i pokrenuti različite web stranice/aplikacije koristeći različite verzije PHP-a na istom web poslužitelju. Kao administrator Linux sustava, morate postaviti okruženje u kojem možete pokrenuti više web stranica koristeći različite PHP verzije na jednom web poslužitelju, npr. Nginx.

U ovom vodiču objasnit ćemo vam kako instalirati više verzija PHP-a i konfigurirati web poslužitelj Nginx da radi s njima putem blokova poslužitelja (virtualni hostovi u Apacheu) u CentOS/RHEL 7 distribucije koje koriste LEMP stog.

Pročitajte također: Pyenv – instalirajte više verzija Pythona za određeni projekt

Nginx koristi PHP-FPM (skraćenica za FastCGI Process Manager), što je alternativna implementacija PHP FastCGI s nekim dodatne, korisne značajke za jako opterećene web stranice.

Postavljanje okoline za testiranje

  1. CentOS 7 ili RHEL 7 poslužitelj s minimalnom instalacijom.
  2. Nginx HTTP poslužitelj.
  3. PHP 7.1 (koristit će se kao zadana verzija) i 5.6.
  4. MariaDB poslužitelj baze podataka.
  5. IP adresa poslužitelja: 192.168.56.10.
  6. Web stranice: example1.com i example2.com.

Korak 1: Instaliranje i omogućavanje EPEL i Remi repozitorija

1. Najprije započnite instaliranjem i omogućivanjem EPEL i Remi repozitorija, koji nudi najnovije verzije PHP stog na distribucijama 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. Zatim instalirajte paket yum-utils koji proširuje yum-ove izvorne funkcionalnosti i pruža naredbu yum-config-manager koja se koristi za omogućavanje ili onemogućiti Yum spremišta na sustavu.

yum install yum-utils

Napomena: Na RHEL 7 možete omogućiti opcijski kanal za neke ovisnosti pomoću sljedeće naredbe.

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

Korak 2: Instalacija Nginx web poslužitelja

3. Da bismo instalirali najnoviju verziju Nginxa, moramo dodati službeni Nginx repozitorij, stvoriti datoteku pod nazivom /etc/yum.repos.d/nginx.repo.

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

Dodajte sljedeće retke u datoteku prema vašoj distribuciji.

--------------- 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. Nakon što je nginx repo dodan, možete instalirati Nginx pomoću alata za upravljanje paketima yum kao što je prikazano.

yum install nginx

Korak 3: Instalacija MariaDB poslužitelja baze podataka

5. Da bismo instalirali najnoviju verziju MariaDB-a, moramo dodati službeni MariaDB repozitorij, stvoriti datoteku pod nazivom /etc/yum.repos.d/mariadb.repo.

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

Dodajte sljedeće retke u datoteku prema vašoj distribuciji.

--------------- 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. Nakon što je MariaDB repo dodan, možete instalirati MariaDB pomoću alata za upravljanje paketima yum kao što je prikazano.

yum install MariaDB-client MariaDB-server

7. Nakon toga osigurajte instalaciju poslužitelja baze podataka pomoću skripte ispod. Postavite root lozinku i odgovorite y i pritisnite [Enter] za ostala sljedeća pitanja kako biste onemogućili udaljenu root korisničku prijavu, uklonili anonimne korisničke račune i testirali bazu podataka koja default mogu pristupiti svi korisnici, čak i anonimni korisnici.

mysql_secure_installation

Pročitajte također: 12 MySQL/MariaDB najboljih sigurnosnih rješenja za Linux

Korak 4: Instaliranje više verzija PHP-a

8. Da biste instalirali različite verzije PHP-a za svoje projekte, upotrijebite naredbu yum-config-manager da instalirate više verzija PHP-a zajedno s najpotrebnijim modulima kao što je prikazano.

Instalirajte verziju 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

Instalirajte verziju 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. Nakon što instalirate PHP, možete koristiti sljedeću naredbu za provjeru zadane verzije PHP-a koja se koristi na vašem poslužitelju.

php -v

Korak 5: Konfiguriranje PHP-FPM i PHP56-PHP-FPM

10. Ovo je najzanimljiviji dio ovog vodiča, objašnjava kako zapravo možete pokrenuti više PHP verzija na svom poslužitelju. Ovdje ćete konfigurirati različite verzije php-fpm s kojima će Nginx raditi. Trebali biste definirati korisnika/grupu FastCGI procesa kao i portove na kojima će slušati.

Ovo su sljedeće dvije konfiguracijske datoteke koje ćete urediti.

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

Otvorite gornje datoteke, postavite korisnika/grupu FastCGI procesa.

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

Zadane vrijednosti trebaju biti apache, promijenite ih u nginx kao što je prikazano.

user = nginx
group = nginx

11. Zatim pronađite parametre slušanja i definirajte adresu:port na koji će se FastCGI zahtjevi primati.

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

12. Kada završite sve gore navedene konfiguracije, trebate pokrenuti i omogućiti Nginx, MariaDB i PHP-FPM za automatsko pokretanje pri dizanju sustava.

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 

Pažnja: U slučaju da dobijete bilo kakvu pogrešku prilikom pokretanja druge instance PHP-a, php56-php-fpm, SELinux pravilo može blokirati to od početka. Ako je SELinux u načinu provedbe, postavite ga na dopušteni način, zatim pokušajte ponovno pokrenuti uslugu.

getenforce
setenforce 0 

Korak 6: Postavite web stranice s dopuštenjima

13. U ovom trenutku sada možete stvoriti potrebne direktorije za svoje web stranice pod /var/www/html/. Također morate stvoriti direktorije za pohranjivanje zapisa na sljedeći način:

---------------- 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. Postavite odgovarajuće vlasničke dozvole za sve direktorije.

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

Korak 7: Postavite blokove Nginx poslužitelja za web stranice

15. Sada konfigurirajte kako će Nginx obrađivati zahtjeve prema vašim web stranicama koristeći konfiguracijske datoteke bloka poslužitelja koje bi se trebale nalaziti u /etc/nginx/conf.d/.

Napravite konfiguracijske datoteke za svoje web stranice koje završavaju ekstenzijom .conf.

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

Zatim zalijepite sljedeće konfiguracije blokova poslužitelja u odgovarajuće datoteke.

Web stranica 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;

        }
}

Web stranica 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. Provjerite imate li sljedeći redak u završnom dijelu http bloka u /etc/nginx/nginx.conf. Pomaže uključiti sve konfiguracijske datoteke unutar direktorija /etc/nginx/conf.d/ kada Nginx radi.

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

Korak 8: Testiranje različitih PHP verzija

17. Konačno, trebate testirati da vaš poslužitelj koristi dvije verzije PHP-a. Možete izraditi vrlo osnovnu skriptu info.php u korijenskim direktorijima dokumenata vaših web stranica kao što je prikazano.

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

18. Da biste primijenili sve promjene koje ste napravili iznad, morate ponovo pokrenuti Nginx, php-fpm i php56-php- fpm. Ali prije svega možete provjeriti ima li u Nginx konfiguracijskim datotekama sintaktičkih pogrešaka prije nego što to učinite.

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

19. Postoji još jedna posljednja stvar koju trebate učiniti, posebno ako svoj poslužitelj pokrećete lokalno, morate postaviti lokalni DNS pomoću datoteke /etc/hosts kao što je prikazano u snimka zaslona u nastavku.

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. Konačno, otvorite web preglednik i upišite sljedeće adrese kako biste provjerili verzije PHP-a instalirane na sustavu.

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

To je to! Sada možete implementirati datoteke i testirati web stranice s različitim PHP verzijama. Ako imate bilo kakvih dodataka ili pitanja za iznijeti, upotrijebite obrazac za komentare u nastavku.