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.
- En RHEL 7-server med minimal installation.
- Nginx HTTP-server.
- PHP 7.1 (skal bruges som standardversion) og 5.6.
- MariaDB-databaseserver.
- Server-IP-adresse: 192.168.56.10.
- 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.