Ricerca nel sito web

Come eseguire più siti Web con diverse versioni PHP in Nginx


A volte gli sviluppatori PHP desiderano creare ed eseguire diversi siti Web/applicazioni utilizzando versioni diverse di PHP sullo stesso server Web. In qualità di amministratore di sistema Linux, devi configurare un ambiente in cui puoi eseguire più siti Web utilizzando diverse versioni PHP su un singolo server Web, ad esempio Nginx.

In questo tutorial ti spiegheremo come installare più versioni di PHP e configurare il server web Nginx per lavorare con loro tramite i blocchi server (host virtuali in Apache) in Distribuzioni CentOS/RHEL 7 che utilizzano lo stack LEMP.

Leggi anche: Pyenv – Installa più versioni Python per progetti specifici

Nginx utilizza PHP-FPM (sta per FastCGI Process Manager), che è un'implementazione alternativa di PHP FastCGI con alcune funzionalità extra e utili per siti Web molto caricati.

Configurazione dell'ambiente di test

  1. Un server CentOS 7 o RHEL 7 con installazione minima.
  2. Server HTTP Nginx.
  3. PHP 7.1 (da utilizzare come versione predefinita) e 5.6.
  4. Server della banca dati MariaDB.
  5. Indirizzo IP del server: 192.168.56.10.
  6. Siti web: example1.com e example2.com.

Passaggio 1: installazione e abilitazione del repository EPEL e Remi

1. Inizia innanzitutto installando e abilitando i repository EPEL e Remi, che offrono le ultime versioni di PHP stack sulle distribuzioni 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. Successivamente installa il pacchetto yum-utils, che estende le funzionalità native di yum e fornisce il comando yum-config-manager, utilizzato per abilitare o disabilitare i repository Yum sul sistema.

yum install yum-utils

Nota: su RHEL 7 puoi abilitare il canale opzionale per alcune dipendenze utilizzando il seguente comando.

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

Passaggio 2: installazione del server Web Nginx

3. Per installare l'ultima versione di Nginx, dobbiamo aggiungere il repository ufficiale Nginx, creare un file denominato /etc/yum.repos.d/nginx.repo.

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

Aggiungi le seguenti righe al file secondo la tua distribuzione.

--------------- 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. Una volta aggiunto il repository nginx, puoi installare Nginx utilizzando lo strumento di gestione pacchetti yum come mostrato.

yum install nginx

Passaggio 3: installazione del server database MariaDB

5. Per installare l'ultima versione di MariaDB, dobbiamo aggiungere il repository ufficiale di MariaDB, creare un file denominato /etc/yum.repos.d/mariadb.repo.

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

Aggiungi le seguenti righe al file secondo la tua distribuzione.

--------------- 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. Una volta aggiunto il repository MariaDB, puoi installare MariaDB utilizzando lo strumento di gestione pacchetti yum come mostrato.

yum install MariaDB-client MariaDB-server

7. Successivamente, proteggi l'installazione del server database utilizzando lo script seguente. Imposta una password root e rispondi y e premi [Invio] per il resto delle domande successive per disabilitare l'accesso utente root remoto, rimuovere account utente anonimi e testare il database che l'accesso predefinito è accessibile a tutti gli utenti, anche agli utenti anonimi.

mysql_secure_installation

Leggi anche: 12 best practice per la sicurezza MySQL/MariaDB per Linux

Passaggio 4: installazione di più versioni di PHP

8. Per installare diverse versioni di PHP per i tuoi progetti, utilizza il comando yum-config-manager per installare più versioni di PHP insieme alla maggior parte dei moduli richiesti come mostrato.

Installa la versione 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

Installa la versione 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. Una volta installato PHP, puoi utilizzare il seguente comando per verificare la versione predefinita di PHP utilizzata sul tuo server.

php -v

Passaggio 5: configurazione di PHP-FPM e PHP56-PHP-FPM

10. Questa è la parte più interessante di questo tutorial, spiega come puoi effettivamente eseguire più versioni PHP sul tuo server. Qui configurerai le diverse versioni di php-fpm con cui funzionerà Nginx. Dovresti definire l'utente/gruppo dei processi FastCGI nonché le porte su cui ascolteranno.

Questi sono i seguenti due file di configurazione che modificherai.

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

Apri i file sopra, imposta l'utente/gruppo dei processi 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] 

I valori predefiniti dovrebbero essere apache, cambiali in nginx come mostrato.

user = nginx
group = nginx

11. Successivamente, trova i parametri di ascolto e definisci l'indirizzo:porta su cui verranno ricevute le richieste FastCGI.

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

12. Una volta completata tutta la configurazione di cui sopra, è necessario avviare e abilitare Nginx, MariaDB e PHP-FPM per l'avvio automatico all'avvio del sistema.

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 

Attenzione: nel caso in cui si verifichino errori durante l'avvio della seconda istanza di PHP, php56-php-fpm, una policy SELinux potrebbe bloccare dall'inizio. Se SELinux è in modalità di applicazione, impostalo su modalità permissiva, quindi prova ad avviare nuovamente il servizio.

getenforce
setenforce 0 

Passaggio 6: configurazione dei siti Web con autorizzazioni

13. A questo punto potete creare le directory necessarie per i vostri siti web in /var/www/html/. È inoltre necessario creare directory per archiviare i log come segue:

---------------- 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. Imposta le autorizzazioni di proprietà appropriate su tutte le directory.

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

Passaggio 7: imposta i blocchi server Nginx per i siti Web

15. Ora configura il modo in cui Nginx elaborerà le richieste ai tuoi siti web utilizzando i file di configurazione del blocco del server che dovrebbero trovarsi in /etc/nginx/conf.d/.

Crea i file di configurazione per i tuoi siti web che terminano con l'estensione .conf.

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

Quindi incolla le seguenti configurazioni del blocco server nei rispettivi file.

Sito 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;

        }
}

Sito 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. Assicurati di avere la seguente riga nella parte finale del blocco http in /etc/nginx/nginx.conf. È utile includere tutti i file di configurazione nella directory /etc/nginx/conf.d/ quando Nginx è in esecuzione.

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

Passaggio 8: testare diverse versioni di PHP

17. Infine, devi verificare che il tuo server utilizzi le due versioni di PHP. Puoi creare uno script info.php molto semplice nelle directory root dei documenti dei tuoi siti web, come mostrato.

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

18. Per applicare tutte le modifiche apportate sopra, è necessario riavviare Nginx, php-fpm e php56-php- fpm. Ma puoi prima di tutto controllare che i file di configurazione di Nginx non contengano errori di sintassi prima di farlo.

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

19. C'è un'ultima cosa da fare, soprattutto se stai utilizzando il tuo server localmente, devi impostare il DNS locale utilizzando il file /etc/hosts come mostrato nel schermata qui sotto.

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. Infine, apri un browser web e digita i seguenti indirizzi per verificare le versioni di PHP installate sul sistema.

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

Questo è tutto! Ora puoi distribuire file e testare siti Web con diverse versioni PHP. Se hai qualche aggiunta da fare o domande da proporre, utilizza il modulo commenti qui sotto.