Sådan køres flere websteder med forskellige PHP-versioner i Nginx


Nogle gange ønsker PHP-udviklere at opbygge og køre forskellige websteder/applikationer ved hjælp af forskellige versioner af PHP på den samme webserver. Som Linux-systemadministrator skal du konfigurere et miljø, hvor du kan køre flere hjemmesider ved hjælp af forskellige PHP-versioner på en enkelt webserver, dvs. Nginx.

I denne vejledning forklarer vi dig, hvordan du installerer flere versioner af PHP og konfigurerer webserveren Nginx til at arbejde med dem via serverblokkene (virtuelle værter i Apache) i CentOS/RHEL 7-distributioner ved hjælp af LEMP-stak.

Nginx bruger PHP-FPM (står for FastCGI Process Manager), som er en alternativ PHP FastCGI-implementering med nogle ekstra nyttige funktioner til stærkt belastede websteder.

  1. En RHEL 7-server med minimal installation.
  2. Nginx HTTP-server.
  3. PHP 7.1 (skal bruges som standardversion) og 5.6.
  4. MariaDB-databaseserver.
  5. Server-IP-adresse: 192.168.56.10.
  6. Websites: example1.com og example2.com.

Trin 1: Installation og aktivering af EPEL og Remi Repository

1. Start først med at installere og aktivere EPEL og Remi repository, som tilbyder de nyeste versioner af PHP stack på CentOS/RHEL 7 distributioner.

# 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 derefter yum-utils-pakken, som udvider yums oprindelige funktioner og leverer yum-config-manager-kommando, som bruges til at aktivere eller deaktivere Yum-arkiver på systemet.

# yum install yum-utils

Bemærk: På RHEL 7 kan du aktivere den valgfri kanal til nogle afhængigheder ved hjælp af følgende kommando.

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

Trin 2: Installation af Nginx Web Server

3. For at installere den nyeste version af Nginx skal vi tilføje det officielle Nginx-arkiv, oprette en fil med navnet /etc/yum.repos.d/nginx.repo.

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

Tilføj følgende linjer til filen i henhold til din distribution.

--------------- 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 tilføjet, kan du installere Nginx ved hjælp af yum pakkehåndteringsværktøj som vist.

# yum install nginx

Trin 3: Installation af MariaDB-databaseserver

5. For at installere den nyeste version af MariaDB skal vi tilføje det officielle MariaDB-lager, oprette en fil med navnet /etc/yum.repos.d/mariadb.repo.

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

Tilføj følgende linjer til filen i henhold til din distribution.

--------------- 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 tilføjet, kan du installere MariaDB ved hjælp af yum pakkehåndteringsværktøj som vist.

# yum install MariaDB-client MariaDB-server

7. Derefter skal du sikre installationen af databaseserveren ved hjælp af nedenstående script. Indstil en root-adgangskode, og svar y , og tryk på [Enter] for resten af de efterfølgende spørgsmål for at deaktivere fjern root-brugerlogin, fjerne anonyme brugerkonti og testdatabase, som som standard er tilgængelig for alle brugere , endda anonyme brugere.

# mysql_secure_installation

Trin 4: Installation af flere versioner af PHP

8. For at installere forskellige versioner af PHP til dine projekter skal du bruge kommandoen yum-config-manager til at installere flere versioner af PHP sammen med de mest krævede 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 du er installeret PHP, kan du bruge følgende kommando til at kontrollere standardversionen af PHP, der bruges på din server.

# php -v

Trin 5: Konfiguration af PHP-FPM og PHP56-PHP-FPM

10. Dette er den mest interessante del af denne tutorial, det forklarer, hvordan du faktisk kan køre flere PHP-versioner på din server. Her konfigurerer du de forskellige versioner af php-fpm, som Nginx vil arbejde med. Du skal definere brugeren/gruppen af FastCGI-processerne samt de porte, de vil lytte til.

Dette er de følgende to konfigurationsfiler, som du vil 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

Åbn filerne ovenfor, indstil brugeren/gruppen af FastCGI-processer.

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

Standardværdierne skal være apache, skift dem til nginx som vist.

user = nginx
group = nginx

11. Find derefter lytteparametrene, og definer adressen: port, hvorpå FastCGI-anmodninger modtages.

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

12. Når alle ovenstående konfigurationer er udført, skal du starte og aktivere Nginx, MariaDB og PHP-FPM til automatisk start ved systemstart.

# 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 tilfælde af at du får fejl, mens du starter den anden forekomst af PHP, php56-php-fpm, kan en SELinux-politik blokere for start. Hvis SELinux er i håndhævelsestilstand, skal du indstille den til tilladelig tilstand og derefter prøve at starte tjenesten igen.

# getenforce
# setenforce 0 

Trin 6: Konfigurer websteder med tilladelser

13. På dette tidspunkt kan du nu oprette de nødvendige mapper til dine websteder under/var/www/html /. Du skal også oprette mapper for at gemme logfiler 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. Indstil de relevante ejerskabstilladelser for alle mapper.

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

Trin 7: Opsæt Nginx-serverblokke til websteder

15. Konfigurer nu, hvordan Nginx behandler anmodninger til dine websteder ved hjælp af konfigurationsfilerne til serverblokken, som skal være placeret i /etc/nginx/conf.d/.

Opret konfigurationsfilerne til dine websteder, der slutter med .conf udvidelse.

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

Indsæt derefter følgende serverblokkonfigurationer i de respektive filer.

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. Sørg for, at du har følgende linje i den afsluttende del af http-blokken i /etc/nginx/nginx.conf. Det hjælper med at inkludere alle konfigurationsfiler i /etc/nginx/conf.d/ biblioteket, når Nginx kører.

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

Trin 8: Test forskellige PHP-versioner

17. Endelig skal du teste, at din server bruger de to versioner af PHP. Du kan oprette et meget grundlæggende info.php-script i dokumentets rodmapper på dine websteder som vist.

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

18. For at anvende alle de ændringer, du har foretaget ovenfor, skal du genstarte Nginx, php-fpm og php56-php-fpm. Men du kan først og fremmest kontrollere, at Nginx-konfigurationsfilerne har syntaksfejl, inden du gør det.

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

19. Der er en anden sidste ting at gøre, især hvis du kører din server lokalt, skal du konfigurere lokal DNS ved hjælp af/etc/hosts-filen som vist på skærmbilledet nedenfor.

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. Til sidst skal du åbne en webbrowser og skrive følgende adresser for at kontrollere de versioner af PHP, der er installeret på systemet.

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

Det er det! Nu kan du distribuere filer og teste websteder med forskellige PHP-versioner. Hvis du har tilføjelser eller spørgsmål at stille, så brug nedenstående kommentarformular.