Cum să rulați mai multe site-uri web cu diferite versiuni PHP în Nginx
Uneori, dezvoltatorii PHP doresc să construiască și să ruleze diferite site-uri/aplicații folosind versiuni diferite de PHP pe același server web. În calitate de administrator de sistem Linux, trebuie să configurați un mediu în care puteți rula mai multe site-uri web folosind diferite versiuni PHP pe un singur server web, adică Nginx.
În acest tutorial, vă vom explica cum să instalați mai multe versiuni de PHP și să configurați serverul web Nginx pentru a lucra cu ele prin intermediul blocurilor de server (gazde virtuale în Apache) în Distribuții CentOS/RHEL 7 folosind stiva LEMP.
Citiți și: Pyenv – Instalați mai multe versiuni Python pentru un anumit proiect
Nginx folosește PHP-FPM (abreviat pentru FastCGI Process Manager), care este o implementare alternativă a PHP FastCGI cu unele caracteristici suplimentare utile pentru site-urile web cu încărcare intensă.
Configurarea mediului de testare
- Un server CentOS 7 sau RHEL 7 cu instalare minimă.
- Server HTTP Nginx.
- PHP 7.1 (pentru a fi folosit ca versiune implicită) și 5.6.
- Server de baze de date MariaDB.
- Adresa IP a serverului: 192.168.56.10.
- Site-uri web: example1.com și example2.com.
Pasul 1: Instalarea și activarea EPEL și Remi Repository
1. Începeți mai întâi prin instalarea și activarea depozitelor EPEL și Remi, care oferă cele mai recente versiuni ale PHP stiva pe distribuțiile 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. Apoi instalați pachetul yum-utils, care extinde funcționalitățile native ale lui yum și oferă comanda yum-config-manager, care este folosită pentru a activa sau dezactivați depozitele Yum din sistem.
yum install yum-utils
Notă: pe RHEL 7 puteți activa canalul opțional pentru unele dependențe folosind următoarea comandă.
subscription-manager repos --enable=rhel-7-server-optional-rpms
Pasul 2: Instalarea serverului web Nginx
3. Pentru a instala cea mai recentă versiune de Nginx, trebuie să adăugăm depozitul oficial Nginx, să creăm un fișier numit /etc/yum.repos.d/nginx.repo.
vi /etc/yum.repos.d/nginx.repo
Adăugați următoarele rânduri la fișier conform distribuției dvs.
--------------- 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. După ce nginx repo a fost adăugat, puteți instala Nginx folosind instrumentul de gestionare a pachetelor yum, așa cum se arată.
yum install nginx
Pasul 3: Instalarea serverului de bază de date MariaDB
5. Pentru a instala cea mai recentă versiune de MariaDB, trebuie să adăugăm depozitul oficial MariaDB, să creăm un fișier numit /etc/yum.repos.d/mariadb.repo.
vi /etc/yum.repos.d/mariadb.repo
Adăugați următoarele rânduri la fișier conform distribuției dvs.
--------------- 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. După ce a fost adăugat depozitul MariaDB, puteți instala MariaDB folosind instrumentul de gestionare a pachetelor yum, așa cum se arată.
yum install MariaDB-client MariaDB-server
7. Apoi, asigurați instalarea serverului de baze de date utilizând scriptul de mai jos. Setați o parolă root și răspundeți la y
și apăsați pe [Enter] pentru restul întrebărilor ulterioare pentru a dezactiva conectarea la distanță a utilizatorului root, a elimina conturile de utilizator anonim și a testa baza de date care, prin implicit poate fi accesat de toți utilizatorii, chiar și de utilizatorii anonimi.
mysql_secure_installation
Citiți și: 12 cele mai bune practici de securitate MySQL/MariaDB pentru Linux
Pasul 4: Instalarea mai multor versiuni de PHP
8. Pentru a instala diferite versiuni de PHP pentru proiectele dvs., utilizați comanda yum-config-manager pentru a instala mai multe versiuni de PHP împreună cu majoritatea modulelor necesare, așa cum se arată.
Instalați versiunea 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
Instalați versiunea 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. Odată instalat PHP, puteți utiliza următoarea comandă pentru a verifica versiunea implicită de PHP folosită pe serverul dvs.
php -v
Pasul 5: Configurarea PHP-FPM și PHP56-PHP-FPM
10. Aceasta este cea mai interesantă parte a acestui tutorial, care explică cum puteți rula mai multe versiuni PHP pe serverul dvs. Aici, veți configura diferitele versiuni de php-fpm cu care va funcționa Nginx. Ar trebui să definiți utilizatorul/grupul de procese FastCGI, precum și porturile pe care vor asculta.
Acestea sunt următoarele două fișiere de configurare pe care le veți edita.
- php-fpm (implicit 7.1) – /etc/php-fpm.d/www.conf
- php56-php-fpm – /opt/remi/php56/root/etc/php-fpm.d/www.conf
Deschideți fișierele de mai sus, setați utilizatorul/grupul de procese 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]
Valorile implicite ar trebui să fie apache, schimbați-le în nginx după cum se arată.
user = nginx
group = nginx
11. Apoi, găsiți parametrii de ascultare și definiți adresa:port pe care vor fi primite solicitările FastCGI.
listen = 127.0.0.1:9000 [php-fpm]
listen = 127.0.0.1:9001 [php56-php-fpm]
12. Odată finalizată toate configurațiile de mai sus, trebuie să porniți și să activați Nginx, MariaDB și PHP-FPM pentru a porni automat la pornirea sistemului.
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
Atenție: în cazul în care primiți erori la pornirea celei de-a doua instanțe PHP, php56-php-fpm, o politică SELinux ar putea fi blocată ea de la pornire. Dacă SELinux este în modul de aplicare, setați-l pe modul permisiv, apoi încercați să porniți din nou serviciul.
getenforce
setenforce 0
Pasul 6: Configurați site-uri web cu permisiuni
13. În acest moment, acum puteți crea directoarele necesare pentru site-urile dvs. web sub /var/www/html/. De asemenea, trebuie să creați directoare pentru a stoca jurnalele, după cum urmează:
---------------- 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. Setați permisiunile de proprietate corespunzătoare pentru toate directoarele.
---------------- 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/
Pasul 7: Configurați blocurile serverului Nginx pentru site-uri web
15. Acum configurați modul în care Nginx va procesa cererile către site-urile dvs. web utilizând fișierele de configurare a blocurilor de server care ar trebui să fie localizate în /etc/nginx/conf.d/.
Creați fișierele de configurare pentru site-urile dvs. web care se termină cu extensia .conf
.
vi /etc/nginx/conf.d/example1.com.conf
vi /etc/nginx/conf.d/example2.com.conf
Apoi lipiți următoarele configurații de bloc de server în fișierele respective.
Site-ul 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;
}
}
Site-ul 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. Asigurați-vă că aveți următoarea linie în partea de închidere a blocului http în /etc/nginx/nginx.conf. Vă ajută să includeți toate fișierele de configurare în directorul /etc/nginx/conf.d/ când Nginx rulează.
include /etc/nginx/conf.d/*.conf;
Pasul 8: Testarea diferitelor versiuni PHP
17. În cele din urmă, trebuie să testați dacă serverul dvs. utilizează cele două versiuni de PHP. Puteți crea un script de bază info.php în directoarele rădăcină de documente ale site-urilor dvs. web, așa cum se arată.
echo "<?php phpinfo(); ?>" > /var/www/html/example1.com/info.php
echo "<?php phpinfo(); ?>" > /var/www/html/example2.com/info.php
18. Pentru a aplica toate modificările pe care le-ați făcut mai sus, trebuie să reporniți Nginx, php-fpm și php56-php- fpm. Dar înainte de toate puteți verifica dacă fișierele de configurare Nginx prezintă erori de sintaxă înainte de a face acest lucru.
nginx -t
systemctl restart nginx php-fpm php56-php-fpm
19. Mai este un ultim lucru de făcut, mai ales dacă rulați serverul local, trebuie să configurați DNS local folosind fișierul /etc/hosts așa cum se arată în captură de ecran de mai jos.
192.168.56.10 example1.com example1
192.168.56.10 example2.com example2
20. În cele din urmă, deschideți un browser web și introduceți următoarele adrese pentru a verifica versiunile de PHP instalate în sistem.
http://example1.com/index.php
http://example2.com/index.php
Asta este! Acum puteți implementa fișiere și puteți testa site-uri web cu diferite versiuni PHP. Dacă aveți completări de făcut sau întrebări de pus, folosiți formularul de comentarii de mai jos.