Hvordan kjøre flere nettsteder med forskjellige PHP-versjoner i Nginx


Noen ganger vil PHP-utviklere bygge og kjøre forskjellige nettsteder/applikasjoner ved å bruke forskjellige versjoner av PHP på samme webserver. Som Linux-systemadministrator må du sette opp et miljø der du kan kjøre flere nettsteder med forskjellige PHP-versjoner på en enkelt nettserver, dvs. Nginx.

I denne opplæringen vil vi forklare deg hvordan du installerer flere versjoner av PHP og konfigurerer nettserveren Nginx til å jobbe med dem via serverblokkene (virtuelle verter i Apache) i CentOS/RHEL 7-distribusjoner ved hjelp av LEMP-stack.

Nginx bruker PHP-FPM (står for FastCGI Process Manager), som er en alternativ PHP FastCGI-implementering med noen ekstra, nyttige funksjoner for tungt belastede nettsteder.

  1. En RHEL 7-server med minimal installasjon.
  2. Nginx HTTP-server.
  3. PHP 7.1 (brukes som standardversjon) og 5.6.
  4. MariaDB Database Server.
  5. Tjenerens IP-adresse: 192.168.56.10.
  6. Nettsteder: example1.com og example2.com.

Trinn 1: Installere og aktivere EPEL og Remi Repository

1. Start først med å installere og aktivere EPEL- og Remi-depotet, som tilbyr de nyeste versjonene av PHP-stakken på CentOS/RHEL 7-distribusjoner.

# 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. Installer deretter yum-utils-pakken, som utvider yums opprinnelige funksjonalitet og gir yum-config-manager-kommandoen, som brukes til å aktivere eller deaktivere Yum-repositories på systemet.

# yum install yum-utils

Merk: På RHEL 7 kan du aktivere den valgfrie kanalen for noen avhengigheter ved å bruke følgende kommando.

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

Trinn 2: Installere Nginx Web Server

3. For å installere siste versjon av Nginx, må vi legge til det offisielle Nginx-depotet, lage en fil som heter /etc/yum.repos.d/nginx.repo.

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

Legg til følgende linjer i filen i henhold til distribusjonen din.

--------------- 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. Når nginx repo er lagt til, kan du installere Nginx ved å bruke yum-pakkebehandlingsverktøyet som vist.

# yum install nginx

Trinn 3: Installere MariaDB Database Server

5. For å installere siste versjon av MariaDB, må vi legge til det offisielle MariaDB-depotet, lage en fil som heter /etc/yum.repos.d/mariadb.repo.

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

Legg til følgende linjer i filen i henhold til distribusjonen din.

--------------- 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. Når MariaDB repo er lagt til, kan du installere MariaDB ved å bruke yum-pakkebehandlingsverktøyet som vist.

# yum install MariaDB-client MariaDB-server

7. Etterpå sikrer du databaseserverinstallasjonen ved å bruke skriptet nedenfor. Angi et root-passord og svar y og trykk [Enter] for resten av de påfølgende spørsmålene for å deaktivere ekstern root-brukerpålogging, fjerne anonyme brukerkontoer og testdatabase som som standard kan nås av alle brukere , selv anonyme brukere.

# mysql_secure_installation

Trinn 4: Installere flere versjoner av PHP

8. For å installere forskjellige versjoner av PHP for prosjektene dine, bruk kommandoen yum-config-manager for å installere flere versjoner av PHP sammen med de fleste nødvendige moduler som vist.

# 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. Når PHP er installert, kan du bruke følgende kommando for å sjekke standardversjonen av PHP som brukes på serveren din.

# php -v

Trinn 5: Konfigurere PHP-FPM og PHP56-PHP-FPM

10. Dette er den mest interessante delen av denne opplæringen, den forklarer hvordan du faktisk kan kjøre flere PHP-versjoner på serveren din. Her vil du konfigurere de forskjellige versjonene av php-fpm som Nginx vil fungere med. Du bør definere brukeren/gruppen av FastCGI-prosessene så vel som portene de skal lytte på.

Dette er de følgende to konfigurasjonsfilene som du skal redigere.

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

Åpne filene ovenfor, angi brukeren/gruppen av FastCGI-prosesser.

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

Standardverdiene skal være apache, endre dem til nginx som vist.

user = nginx
group = nginx

11. Finn deretter lytteparametrene og definer adresse:porten som FastCGI-forespørsler vil bli mottatt på.

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

12. Når all konfigurasjonen ovenfor er fullført, må du starte og aktivere Nginx, MariaDB og PHP-FPM for å automatisk starte ved systemoppstart.

# 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 

OBS: I tilfelle du får feil når du starter den andre forekomsten av PHP, php56-php-fpm, kan en SELinux-policy blokkere den fra å starte. Hvis SELinux er i håndhevingsmodus, sett den til permissiv modus, og prøv deretter å starte tjenesten igjen.

# getenforce
# setenforce 0 

Trinn 6: Konfigurer nettsteder med tillatelser

13. På dette tidspunktet kan du nå opprette de nødvendige katalogene for nettstedene dine under /var/www/html/. Du må også opprette kataloger for å lagre logger som følger:

---------------- 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. Angi de riktige eierskapstillatelsene for alle katalogene.

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

Trinn 7: Konfigurer Nginx-serverblokker for nettsteder

15. Konfigurer nå hvordan Nginx skal behandle forespørsler til nettstedene dine ved å bruke konfigurasjonsfilene for serverblokk som skal være plassert i /etc/nginx/conf.d/.

Lag konfigurasjonsfilene for nettstedene dine som slutter med utvidelsen .conf.

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

Lim deretter inn følgende serverblokkkonfigurasjoner i de respektive filene.

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. Pass på at du har følgende linje i den avsluttende delen av http-blokken i /etc/nginx/nginx.conf. Det hjelper å inkludere alle konfigurasjonsfiler i /etc/nginx/conf.d/-katalogen når Nginx kjører.

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

Trinn 8: Testing av forskjellige PHP-versjoner

17. Til slutt må du teste at serveren din bruker de to versjonene av PHP. Du kan lage et veldig grunnleggende info.php-skript i dokumentrotkatalogene på nettsidene dine som vist.

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

18. For å bruke alle endringene du har gjort ovenfor, må du starte Nginx, php-fpm og php56-php-fpm på nytt. Men du kan først og fremst sjekke at Nginx-konfigurasjonsfilene for eventuelle syntaksfeil før du gjør det.

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

19. Det er en annen siste ting å gjøre, spesielt hvis du kjører serveren lokalt, må du sette opp lokal DNS ved å bruke /etc/hosts-filen som vist i skjermbildet nedenfor.

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. Til slutt åpner du en nettleser og skriver inn følgende adresser for å bekrefte versjonene av PHP som er installert på systemet.

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

Det er det! Nå kan du distribuere filer og teste nettsteder med forskjellige PHP-versjoner. Hvis du har noen tillegg å gjøre eller spørsmål å stille, bruk kommentarskjemaet nedenfor.