Vyhledávání na webu

Jak provozovat více webových stránek s různými verzemi PHP v Nginx


Někdy chtějí vývojáři PHP vytvářet a provozovat různé webové stránky/aplikace pomocí různých verzí PHP na stejném webovém serveru. Jako správce systému Linux jste povinni nastavit prostředí, ve kterém můžete provozovat více webových stránek pomocí různých verzí PHP na jednom webovém serveru, tj. Nginx.

V tomto tutoriálu vám vysvětlíme, jak nainstalovat více verzí PHP a nakonfigurovat webový server Nginx, aby s nimi pracoval prostřednictvím bloků serveru (virtuální hostitelé v Apache) v Distribuce CentOS/RHEL 7 využívající zásobník LEMP.

Čtěte také: Pyenv – Instalace více verzí Pythonu pro konkrétní projekt

Nginx používá PHP-FPM (zkratka pro FastCGI Process Manager), což je alternativní implementace PHP FastCGI s některými extra užitečné funkce pro silně zatížené webové stránky.

Nastavení testovacího prostředí

  1. Server CentOS 7 nebo RHEL 7 s minimální instalací.
  2. Nginx HTTP Server.
  3. PHP 7.1 (bude použito jako výchozí verze) a 5.6.
  4. Databázový server MariaDB.
  5. Adresa IP serveru: 192.168.56.10.
  6. Webové stránky: example1.com a example2.com.

Krok 1: Instalace a povolení EPEL a Remi Repository

1. Nejprve začněte instalací a povolením úložiště EPEL a Remi, které nabízí nejnovější verze PHP zásobník na distribucích 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. Dále nainstalujte balíček yum-utils, který rozšiřuje nativní funkce yum a poskytuje příkaz yum-config-manager, který se používá k povolení nebo deaktivujte úložiště Yum v systému.

yum install yum-utils

Poznámka: Na RHEL 7 můžete povolit volitelný kanál pro některé závislosti pomocí následujícího příkazu.

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

Krok 2: Instalace webového serveru Nginx

3. Chcete-li nainstalovat nejnovější verzi Nginx, musíme přidat oficiální úložiště Nginx, vytvořit soubor s názvem /etc/yum.repos.d/nginx.repo.

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

Přidejte následující řádky do souboru podle vaší distribuce.

--------------- 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. Po přidání úložiště nginx můžete nainstalovat Nginx pomocí nástroje správce balíčků yum, jak je znázorněno.

yum install nginx

Krok 3: Instalace databázového serveru MariaDB

5. Chcete-li nainstalovat nejnovější verzi MariaDB, musíme přidat oficiální úložiště MariaDB, vytvořit soubor s názvem /etc/yum.repos.d/mariadb.repo.

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

Přidejte následující řádky do souboru podle vaší distribuce.

--------------- 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. Jakmile bude MariaDB repo přidáno, můžete nainstalovat MariaDB pomocí nástroje správce balíčků yum, jak je znázorněno.

yum install MariaDB-client MariaDB-server

7. Poté zabezpečte instalaci databázového serveru pomocí níže uvedeného skriptu. Nastavte heslo uživatele root a odpovězte y a stiskněte [Enter] u zbývajících následujících otázek, abyste deaktivovali vzdálené přihlášení uživatele root, odebrali účty anonymních uživatelů a otestovali databázi, která výchozí mohou přistupovat všichni uživatelé, dokonce i anonymní uživatelé.

mysql_secure_installation

Přečtěte si také: 12 osvědčených postupů zabezpečení MySQL/MariaDB pro Linux

Krok 4: Instalace více verzí PHP

8. Chcete-li pro své projekty nainstalovat různé verze PHP, použijte příkaz yum-config-manager k instalaci více verzí PHP spolu s většinou požadovaných modulů, jak je uvedeno na obrázku.

Nainstalujte verzi PHP 7.1

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

Nainstalujte verzi PHP 5.6

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. Po instalaci PHP můžete pomocí následujícího příkazu zkontrolovat výchozí verzi PHP používanou na vašem serveru.

php -v

Krok 5: Konfigurace PHP-FPM a PHP56-PHP-FPM

10. Toto je nejzajímavější část tohoto tutoriálu, vysvětluje, jak můžete na svém serveru skutečně spustit více verzí PHP. Zde nakonfigurujete různé verze php-fpm, se kterými bude Nginx pracovat. Měli byste definovat uživatele/skupinu procesů FastCGI a také porty, na kterých budou naslouchat.

Toto jsou následující dva konfigurační soubory, které budete upravovat.

  • php-fpm (výchozí 7.1) – /etc/php-fpm.d/www.conf
  • php56-php-fpm – /opt/remi/php56/root/etc/php-fpm.d/www.conf

Otevřete výše uvedené soubory, nastavte uživatele/skupinu procesů 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] 

Výchozí hodnoty by měly být apache, změňte je na nginx podle obrázku.

user = nginx
group = nginx

11. Dále najděte parametry naslouchání a definujte address:port, na kterém budou přijímány požadavky FastCGI.

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

12. Po dokončení výše uvedené konfigurace je třeba spustit a povolit Nginx, MariaDB a PHP-FPM pro automatické spuštění při startu systému.

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: V případě, že se při spouštění druhé instance PHP, php56-php-fpm objeví nějaké chyby, může být blokována zásada SELinux to od začátku. Pokud je SELinux v režimu vynucení, nastavte jej na povolovací režim a zkuste službu spustit znovu.

getenforce
setenforce 0 

Krok 6: Nastavte webové stránky s oprávněními

13. Nyní můžete vytvořit potřebné adresáře pro své webové stránky pod /var/www/html/. Musíte také vytvořit adresáře pro ukládání protokolů následovně:

---------------- 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. Nastavte příslušná oprávnění vlastnictví pro všechny adresáře.

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

Krok 7: Nastavení bloků serveru Nginx pro webové stránky

15. Nyní nakonfigurujte, jak bude Nginx zpracovávat požadavky na vaše webové stránky, pomocí konfiguračních souborů bloků serveru, které by měly být umístěny v /etc/nginx/conf.d/.

Vytvořte konfigurační soubory pro své webové stránky končící příponou .conf.

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

Poté do příslušných souborů vložte následující konfigurace bloků serveru.

Web 1

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;

        }
}

Web 2

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. Ujistěte se, že máte následující řádek v závěrečné části bloku http v /etc/nginx/nginx.conf. Pomáhá zahrnout všechny konfigurační soubory do adresáře /etc/nginx/conf.d/, když je Nginx spuštěn.

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

Krok 8: Testování různých verzí PHP

17. Nakonec musíte otestovat, že váš server používá dvě verze PHP. V kořenových adresářích dokumentů vašich webových stránek můžete vytvořit velmi základní skript info.php, jak je znázorněno na obrázku.

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

18. Chcete-li použít všechny změny, které jste provedli výše, musíte restartovat Nginx, php-fpm a php56-php- fpm. Nejprve však můžete zkontrolovat, zda konfigurační soubory Nginx neobsahují chyby syntaxe, než tak učiníte.

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

19. Je tu ještě jedna poslední věc, kterou musíte udělat, zvláště pokud provozujete svůj server lokálně, musíte nastavit místní DNS pomocí souboru /etc/hosts, jak je uvedeno v snímek obrazovky níže.

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. Nakonec otevřete webový prohlížeč a zadejte následující adresy, abyste ověřili verze PHP nainstalované v systému.

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

A je to! Nyní můžete nasazovat soubory a testovat webové stránky s různými verzemi PHP. Máte-li nějaké doplnění nebo dotazy, použijte níže uvedený formulář pro komentáře.