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
- Un server CentOS 7 o RHEL 7 con installazione minima.
- Server HTTP Nginx.
- PHP 7.1 (da utilizzare come versione predefinita) e 5.6.
- Server della banca dati MariaDB.
- Indirizzo IP del server: 192.168.56.10.
- 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.