GNU/Linux >> Znalost Linux >  >> Linux

Spusťte více verzí PHP pro různé domény v NGNIX

Nedávno jsem pro klienta zakoupil plugin EduExpression WordPress pro nastavení vyšetřovacího softwaru. Byl jsem schopen nainstalovat a nakonfigurovat plugin bez větších problémů. Problém se však začal vyskytovat při přístupu k přihlášení studenta – stránka pluginu byla prázdná, když se student pokusil složit zkoušku. No, mám podporu, ne? Kontaktoval jsem tým podpory a řekli, že plugin nefunguje s PHP 7.1 a podporuje pouze PHP 5.6. To je moje chyba – protože jsem měl nastavený server s PHP 7.1 a všechny mé klientské webové stránky běží na PHP 7.1. Nyní, aby EduExpression fungoval, musím nastavit verzi PHP 5.6. Downgrade PHP není nikdy dobrá volba, ale musel jsem to udělat, aby tento plugin fungoval pro klienta. Co takhle nastavit PHP 5.6 pouze pro konkrétní doménu a zbytek nechat běžet na PHP 7.1. No, v tomto tutoriálu vysvětlím, jak nastavit více verzí prostředí PHP a propojit konkrétní verzi PHP s konkrétní doménou v NGINX.

životní prostředí

OS:CentOS 7, WebServer:Nginx, PHP:v7.1 (výchozí), PHP FastCGI:PHP-FPM

Poznámka:Výše ​​uvedené prostředí je již úspěšně nastaveno a spuštěno.

Krok 1 :Instalace více verzí PHP, tj. PHPv5.6 spolu s PHP7.1

Zde používám yum příkaz k instalaci více verzí PHP spolu s nezbytnými moduly, jak je uvedeno níže:

Instalace verze PHP5.6

# yum install php56 php56-php-common 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

Instalovat PHP-FPM pro verzi PHP 5.6

PHP na Nginx funguje přes PHP-FPM (FastCGI Process Manager). PHP-FPM je alternativní implementace PHP FastCGI s některými dalšími funkcemi užitečnými pro weby jakékoli velikosti, zejména pro rušnější weby.

# yum install php56-php-fpm

No, nainstalovali jsme PHP 5.6, ale měli bychom se ujistit, že výchozí verze PHP je stále 7.1.

# php -v
PHP 7.1.22 (cli) (built: Sep 12 2018 07:22:13) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
 with Zend OPcache v7.1.22, Copyright (c) 1999-2018, by Zend Technologies

Konfigurace PHP-FPM a PHP56-PHP-FPM

Nejdůležitější částí tohoto tutoriálu je konfigurace dvou různých PHP-FPM pro dvě verze PHP. Zde nakonfigurujeme dvě různé verze PHP-FPM, se kterými bude Nginx pracovat. Hlavní věcí během konfigurace je uživatel/skupina procesů FastCGI a porty, na kterých naslouchají.

konfigurační soubor PHP-FPM (výchozí 7.1).

/etc/php-fpm.d/www.conf

Ujistěte se, že uživatel/skupina je nastavena na nginx (Výchozí hodnota je apache).

user = nginx
group = nginx

Najděte parametr listen a nastavte jej na port 9000, na kterém budou přijímány požadavky FastCGI.

listen = 127.0.0.1:9000	[php-fpm]
Konfigurační soubor PHp56-PHP-FPM

/opt/remi/php56/root/etc/php-fpm.d/www.conf

Ujistěte se, že uživatel/skupina nastavila nginx (Výchozí hodnota je apache).

user = nginx
group = nginx

Najděte parametr listen a nastavte jej na port 9001, na kterém budou přijímány požadavky FastCGI.

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

Povolit PHP-FPM, PHP56-PHP-FPM a NGINX automatické spuštění při spouštění systému na CentOS 7

Po dokončení výše uvedených konfigurací musíte u PHP-FPM, PHP56-PHP-FPM a Nginx povolit automatické spouštění při startu systému.

# systemctl enable nginx

# systemctl enable php-fpm

# systemctl enable php56-php-fpm
Vypněte SELinux

#sudo setenforce 0

Konfigurace domén s odpovídajícím PHP-FPM pro spouštění PHP

Otevřete odpovídající konfigurační soubor domény Nginx (/etc/nginx/conf.d/ ) a vyhledejte řádek fastcgi_pass a odpovídajícím způsobem jej změňte, aby propojil správnou verzi PHP, kterou má spustit.

Konfigurační soubor Nginx domény 1:/etc/nginx/conf.d/example1.conf

server {
 listen :80;
 server_name example1.com;
 server_name www.example1.com;

 root /home/example1/public_html;
 index index.php index.html index.htm;

 location / {
      try_files $uri $uri/ /index.php?q=$uri$args;
 }
 location ~ \.php$ {
      try_files $uri =404;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param SCRIPT_NAME $fastcgi_script_name;
      include fastcgi_params;
 }
}

Konfigurační soubor Nginx domény 2: /etc/nginx/conf.d/example2.conf

server {
 listen :80;
 server_name example2.com;
 server_name www.example2.com;

 root /home/example2/public_html;
 index index.php index.html index.htm;

 location / {
       try_files $uri $uri/ /index.php?q=$uri$args;
 }
 location ~ \.php$ {
       try_files $uri =404;
       fastcgi_pass 127.0.0.1:9001;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param SCRIPT_NAME $fastcgi_script_name;
       include fastcgi_params;
 }
}

Před restartováním Nginx zkontrolujte, zda konfigurační soubory Nginx neobsahují nějaké chyby syntaxe

# nginx -t

Restartovat Nginx, PHP-fpm, PHp56-PHP-FPM

# systemctrl restart nginx, php-fpm php56-php-fpm

Testujte různé verze PHP pro různé domény

Vytvořte jiné phpinfo soubory v kořenovém adresáři dvou různých domén

# echo "<?php phpinfo(); ?>" > /home/example1/public_html/info.php

# echo "<?php phpinfo(); ?>" > /home/example2/public_html/info.php

Nyní otevřete info.php v prohlížeči k ověření example1.com pomocí PHP 7.1 a example2.com pomocí PHP 5.6.

http://example1.com/info.php

http://example2.com/info.php

A je to! Právě jsem nasadil EduExpression plugin na example2.com, který běží na PHP 5.6.


Linux
  1. nginx - 413 entita požadavku je příliš velká

  2. Více verzí PHP v Plesku

  3. Jak si mohu pro svůj web vybrat jinou verzi PHP?

  1. Jak nastavit subdoménu nebo hostit více domén pomocí nginx na linuxovém serveru

  2. apt-get install pro různé verze pythonu

  3. Jak zkontrolovat, zda je na Ubuntu 12.04 LTS nainstalováno více verzí PHP?

  1. Vytvořte virtuální prostředí pro různé verze Pythonu pomocí Conda

  2. Jak spustit více verzí PHP s Nginx na Ubuntu?

  3. Jak spustit více procesů Tor najednou s různými výstupními IP?