Kako zagnati več spletnih mest z različicami PHP v Nginxu


Včasih razvijalci PHP želijo zgraditi in zagnati različna spletna mesta/aplikacije z različnimi različicami PHP na istem spletnem strežniku. Kot sistemski skrbnik Linuxa morate nastaviti okolje, v katerem lahko na enem spletnem strežniku, to je Nginx, zaženete več spletnih mest z različno različico PHP.

V tej vadnici vam bomo razložili, kako namestiti več različic PHP in konfigurirati spletni strežnik Nginx za delo z njimi prek strežniških blokov (navidezni gostitelji v Apacheju) v distribucijah CentOS/RHEL 7 z uporabo sklada LEMP.

Nginx uporablja PHP-FPM (kratica za FastCGI Process Manager), ki je alternativna izvedba PHP FastCGI z nekaj dodatnimi, uporabnimi funkcijami za močno naložena spletna mesta.

  1. Strežnik RHEL 7 z minimalno namestitvijo.
  2. HTTP strežnik Nginx.
  3. PHP 7.1 (za privzeto različico) in 5.6.
  4. Strežnik zbirke podatkov MariaDB.
  5. Naslov IP strežnika: 192.168.56.10.
  6. Spletna mesta: example1.com in example2.com.

1. korak: Namestitev in omogočanje skladišča EPEL in Remi

1. Najprej začnite z namestitvijo in omogočanjem skladišča EPEL in Remi, ki ponuja najnovejše različice sklada PHP v distribucijah 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. Nato namestite paket yum-utils, ki razširja domače funkcije yuma in ponuja ukaz yum-config-manager, ki se uporablja za omogočanje ali onemogočanje skladišč Yum v sistemu.

# yum install yum-utils

Opomba: V sistemu RHEL 7 lahko z naslednjim ukazom omogočite izbirni kanal za nekatere odvisnosti.

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

2. korak: Namestitev spletnega strežnika Nginx

3. Za namestitev najnovejše različice Nginxa moramo dodati uradno skladišče Nginx, ustvariti datoteko z imenom /etc/yum.repos.d/nginx.repo.

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

Dodajte naslednje vrstice v datoteko glede na vašo distribucijo.

--------------- 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. Ko je nginx repo dodan, lahko Nginx namestite z orodjem yum package manager, kot je prikazano.

# yum install nginx

3. korak: Namestitev strežnika zbirke podatkov MariaDB

5. Za namestitev najnovejše različice MariaDB moramo dodati uradno skladišče MariaDB, ustvariti datoteko z imenom /etc/yum.repos.d/mariadb.repo.

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

Dodajte naslednje vrstice v datoteko glede na vašo distribucijo.

--------------- 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. Ko je dodano repo MariaDB, ga lahko namestite z orodjem za upravljanje paketov yum, kot je prikazano.

# yum install MariaDB-client MariaDB-server

7. Nato s spodnjim skriptom zavarujte namestitev strežnika baz podatkov. Nastavite korensko geslo in odgovorite y in pritisnite [Enter] za preostala naslednja vprašanja, da onemogočite oddaljeno prijavo uporabnika root, odstranite anonimne uporabniške račune in preskusno bazo podatkov, do katere lahko privzeto dostopajo vsi uporabniki , tudi anonimne uporabnike.

# mysql_secure_installation

4. korak: Namestitev več različic PHP

8. Če želite namestiti različne različice PHP za svoje projekte, uporabite ukaz yum-config-manager za namestitev več različic PHP skupaj z večino potrebnih modulov, kot je prikazano.

# 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
# 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. Ko namestite PHP, lahko z naslednjim ukazom preverite privzeto različico PHP, ki se uporablja na vašem strežniku.

# php -v

5. korak: Konfiguriranje PHP-FPM in PHP56-PHP-FPM

10. To je najbolj zanimiv del te vadnice, ki pojasnjuje, kako lahko na svojem strežniku dejansko zaženete več različic PHP. Tu boste konfigurirali različne različice php-fpm, s katerimi bo Nginx delal. Določiti morate uporabnika/skupino procesov FastCGI in vrata, na katerih bodo poslušali.

To sta naslednji dve konfiguracijski datoteki, ki ju boste uredili.

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

Odprite zgornje datoteke, nastavite uporabnika/skupino procesov 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] 

Privzete vrednosti bi morale biti apache, spremenite jih v nginx, kot je prikazano.

user = nginx
group = nginx

11. Nato poiščite parametre poslušanja in določite naslov: vrata, na katera bodo sprejete zahteve FastCGI.

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

12. Ko končate vse zgornje konfiguracije, morate zagnati in omogočiti Nginx, MariaDB in PHP-FPM za samodejni zagon pri zagonu sistema.

# 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 

Pozor: Če pride do napak pri zagonu drugega primerka PHP, php56-php-fpm, ga lahko pravilnik SELinux blokira pri zagonu. Če je SELinux v uveljavitvenem načinu, ga nastavite na dovoljen način in poskusite znova zagnati storitev.

# getenforce
# setenforce 0 

6. korak: Nastavitev spletnih mest z dovoljenji

13. Na tej točki lahko zdaj ustvarite potrebne imenike za svoja spletna mesta pod/var/www/html/. Prav tako morate ustvariti imenike za shranjevanje dnevnikov na naslednji 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. Nastavite ustrezna dovoljenja za lastništvo za vse imenike.

---------------- 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: Namestitev strežniških blokov Nginx za spletna mesta

15. Zdaj nastavite, kako bo Nginx obdeloval zahteve za vaša spletna mesta s konfiguracijskimi datotekami blokov strežnika, ki naj bodo v /etc/nginx/conf.d/.

Ustvarite konfiguracijske datoteke za svoja spletna mesta, ki se končajo z razširitvijo .conf .

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

Nato prilepite naslednje konfiguracije strežniških blokov v ustrezne datoteke.

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;

        }
}
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. Prepričajte se, da imate v zaključnem delu bloka http naslednjo vrstico v /etc/nginx/nginx.conf. Pomaga pri vključitvi vseh konfiguracijskih datotek v imenik /etc/nginx/conf.d/, ko se izvaja Nginx.

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

8. korak: Preizkusite različne različice PHP

17. Nazadnje morate preizkusiti, ali vaš strežnik uporablja dve različici PHP. V korenskih imenikih dokumentov na svojih spletnih mestih lahko ustvarite zelo preprost skript info.php, kot je prikazano.

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

18. Če želite uporabiti vse zgoraj navedene spremembe, morate znova zagnati Nginx, php-fpm in php56-php-fpm. Pred tem pa lahko najprej preverite, ali v konfiguracijskih datotekah Nginx obstajajo kakšne sintaktične napake.

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

19. Še ena stvar, ki jo morate storiti, še posebej, če strežnik uporabljate lokalno, morate nastaviti lokalni DNS z datoteko /etc /hosts, kot je prikazano na spodnjem posnetku zaslona.

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. Nazadnje odprite spletni brskalnik in vnesite naslednje naslove, da preverite različice PHP, nameščene v sistemu.

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

To je To! Zdaj lahko uvedete datoteke in preizkusite spletna mesta z različnimi različicami PHP. Če imate še kakšne dodatke ali vprašanja, uporabite spodnji obrazec za komentar.