Com executar diversos llocs web amb diferents versions de PHP a Nginx


De vegades, els desenvolupadors de PHP volen crear i executar diferents llocs web/aplicacions utilitzant diferents versions de PHP al mateix servidor web. Com a administrador del sistema Linux, heu de configurar un entorn on podeu executar diversos llocs web amb diferents versions de PHP en un sol servidor web, és a dir, Nginx.

En aquest tutorial, us explicarem com instal·lar diverses versions de PHP i configurar el servidor web Nginx perquè funcioni amb ells mitjançant els blocs de servidor (amfitrions virtuals a Apache) a les distribucions CentOS/RHEL 7 mitjançant la pila LEMP.

Nginx utilitza PHP-FPM (significa FastCGI Process Manager), que és una implementació alternativa de PHP FastCGI amb algunes funcions addicionals i útils per a llocs web amb molta càrrega.

  1. Un servidor RHEL 7 amb una instal·lació mínima.
  2. Servidor HTTP Nginx.
  3. PHP 7.1 (que s'utilitzarà com a versió predeterminada) i 5.6.
  4. Servidor de bases de dades MariaDB.
  5. Adreça IP del servidor: 192.168.56.10.
  6. Llocs web: example1.com i example2.com.

Pas 1: instal·lar i habilitar el repositori EPEL i Remi

1. Primer comenceu instal·lant i habilitant el repositori EPEL i Remi, que ofereix les últimes versions de la pila PHP a les distribucions 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. A continuació, instal·leu el paquet yum-utils, que amplia les funcionalitats natives de yum i proporciona l'ordre yum-config-manager, que s'utilitza per habilitar o desactivar els dipòsits Yum al sistema.

# yum install yum-utils

Nota: a RHEL 7 podeu habilitar el canal opcional per a algunes dependències mitjançant l'ordre següent.

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

Pas 2: instal·lació del servidor web Nginx

3. Per instal·lar la darrera versió de Nginx, hem d'afegir el dipòsit oficial de Nginx, crear un fitxer anomenat /etc/yum.repos.d/nginx.repo.

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

Afegiu les línies següents al fitxer segons la vostra distribució.

--------------- 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. Un cop s'ha afegit el repositori nginx, podeu instal·lar Nginx mitjançant l'eina de gestor de paquets yum tal com es mostra.

# yum install nginx

Pas 3: instal·lació del servidor de bases de dades MariaDB

5. Per instal·lar la darrera versió de MariaDB, hem d'afegir el dipòsit oficial de MariaDB, crear un fitxer anomenat /etc/yum.repos.d/mariadb.repo.

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

Afegiu les línies següents al fitxer segons la vostra distribució.

--------------- 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. Un cop s'hagi afegit el repositori MariaDB, podeu instal·lar MariaDB mitjançant l'eina de gestor de paquets yum tal com es mostra.

# yum install MariaDB-client MariaDB-server

7. A continuació, assegureu la instal·lació del servidor de bases de dades mitjançant l'script següent. Establiu una contrasenya root i respon y i premeu [Enter] per a la resta de preguntes posteriors per desactivar l'inici de sessió remot de l'usuari root, eliminar els comptes d'usuari anònim i provar la base de dades a la qual tots els usuaris poden accedir per defecte. , fins i tot usuaris anònims.

# mysql_secure_installation

Pas 4: instal·lació de diverses versions de PHP

8. Per instal·lar diferents versions de PHP per als vostres projectes, utilitzeu l'ordre yum-config-manager per instal·lar diverses versions de PHP juntament amb la majoria dels mòduls necessaris, tal com es mostra.

# 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. Un cop instal·lat PHP, podeu utilitzar l'ordre següent per comprovar la versió predeterminada de PHP que s'utilitza al vostre servidor.

# php -v

Pas 5: Configuració de PHP-FPM i PHP56-PHP-FPM

10. Aquesta és la part més interessant d'aquest tutorial, s'explica com podeu executar diverses versions de PHP al vostre servidor. Aquí, configurareu les diferents versions de php-fpm amb les quals treballarà Nginx. Hauríeu de definir l'usuari/grup dels processos FastCGI així com els ports on escoltaran.

Aquests són els dos fitxers de configuració següents que editareu.

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

Obriu els fitxers anteriors, configureu l'usuari/grup de processos 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] 

Els valors per defecte haurien de ser apache, canvieu-los a nginx tal com es mostra.

user = nginx
group = nginx

11. A continuació, cerqueu els paràmetres d'escolta i definiu l'adreça:port on es rebran les sol·licituds FastCGI.

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

12. Un cop feta tota la configuració anterior, heu d'iniciar i habilitar Nginx, MariaDB i PHP-FPM per iniciar-se automàticament a l'arrencada 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 

Atenció: en cas que rebeu algun error en iniciar la segona instància de PHP, php56-php-fpm, una política de SELinux podria estar bloquejant-lo. Si SELinux està en mode d'aplicació, configureu-lo en mode permissiu i, a continuació, proveu d'iniciar el servei una vegada més.

# getenforce
# setenforce 0 

Pas 6: Configurar llocs web amb permisos

13. En aquest punt, ara podeu crear els directoris necessaris per als vostres llocs web a /var/www/html/. També heu de crear directoris per emmagatzemar els registres de la següent manera:

---------------- 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. Establiu els permisos de propietat adequats a tots els directoris.

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

Pas 7: configureu els blocs del servidor Nginx per a llocs web

15. Ara configureu com processarà Nginx les sol·licituds als vostres llocs web utilitzant els fitxers de configuració del bloc del servidor que haurien d'estar situats a /etc/nginx/conf.d/.

Creeu els fitxers de configuració per als vostres llocs web que acabin amb l'extensió .conf.

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

A continuació, enganxeu les següents configuracions de bloc de servidor als fitxers respectius.

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. Assegureu-vos que teniu la línia següent a la part de tancament del bloc http a /etc/nginx/nginx.conf. Ajuda a incloure tots els fitxers de configuració dins del directori /etc/nginx/conf.d/ quan Nginx s'està executant.

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

Pas 8: prova de diferents versions de PHP

17. Finalment, heu de comprovar que el vostre servidor utilitza les dues versions de PHP. Podeu crear un script info.php molt bàsic als directoris arrel del document dels vostres llocs web, tal com es mostra.

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

18. Per aplicar tots els canvis que heu fet anteriorment, heu de reiniciar Nginx, php-fpm i php56-php-fpm. Però primer de tot, podeu comprovar que els fitxers de configuració de Nginx no tinguin errors de sintaxi abans de fer-ho.

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

19. Hi ha una altra darrera cosa a fer, sobretot si esteu executant el vostre servidor localment, heu de configurar el DNS local mitjançant el fitxer /etc/hosts tal com es mostra a la captura de pantalla següent.

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. Finalment, obriu un navegador web i escriviu les següents adreces per verificar les versions de PHP instal·lades al sistema.

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

Això és! Ara podeu implementar fitxers i provar llocs web amb diferents versions de PHP. Si tens alguna addició a fer o preguntes per presentar, fes servir el formulari de comentaris a continuació.