Wyszukiwanie w witrynie

Jak uruchomić wiele stron internetowych z różnymi wersjami PHP w Nginx


Czasami programiści PHP chcą budować i uruchamiać różne strony internetowe/aplikacje przy użyciu różnych wersji PHP na tym samym serwerze internetowym. Jako administrator systemu Linux musisz skonfigurować środowisko, w którym możesz uruchamiać wiele witryn internetowych przy użyciu różnych wersji PHP na jednym serwerze internetowym, np. Nginx.

W tym samouczku wyjaśnimy Ci, jak zainstalować wiele wersji PHP i skonfigurować serwer WWW Nginx do pracy z nimi za pośrednictwem bloków serwera (hosty wirtualne w Apache) w Dystrybucje CentOS/RHEL 7 korzystające ze stosu LEMP.

Przeczytaj także: Pyenv – zainstaluj wiele wersji Pythona dla konkretnego projektu

Nginx używa PHP-FPM (skrót od FastCGI Process Manager), który jest alternatywną implementacją PHP FastCGI w niektórych dodatkowe, przydatne funkcje dla mocno obciążonych stron internetowych.

Konfiguracja środowiska testowego

  1. Serwer CentOS 7 lub RHEL 7 przy minimalnej instalacji.
  2. Serwer HTTP Nginx.
  3. PHP 7.1 (do użycia jako wersja domyślna) i 5.6.
  4. Serwer bazy danych MariaDB.
  5. Adres IP serwera: 192.168.56.10.
  6. Strony internetowe: example1.com i example2.com.

Krok 1: Instalacja i włączenie repozytorium EPEL i Remi

1. Najpierw zacznij od zainstalowania i włączenia repozytorium EPEL i Remi, które oferuje najnowsze wersje PHP stos w dystrybucjach 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. Następnie zainstaluj pakiet yum-utils, który rozszerza natywne funkcjonalności yum i udostępnia polecenie yum-config-manager, które służy do włączania lub wyłącz repozytoria Yum w systemie.

yum install yum-utils

Uwaga: w RHEL 7 możesz włączyć opcjonalny kanał dla niektórych zależności za pomocą następującego polecenia.

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

Krok 2: Instalacja serwera internetowego Nginx

3. Aby zainstalować najnowszą wersję Nginx, musimy dodać oficjalne repozytorium Nginx, utworzyć plik o nazwie /etc/yum.repos.d/nginx.repo.

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

Dodaj następujące wiersze do pliku zgodnie z dystrybucją.

--------------- 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 dodaniu repozytorium nginx możesz zainstalować Nginx za pomocą narzędzia do zarządzania pakietami yum, jak pokazano.

yum install nginx

Krok 3: Instalacja serwera bazy danych MariaDB

5. Aby zainstalować najnowszą wersję MariaDB, musimy dodać oficjalne repozytorium MariaDB, utworzyć plik o nazwie /etc/yum.repos.d/mariadb.repo.

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

Dodaj następujące wiersze do pliku zgodnie z dystrybucją.

--------------- 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. Po dodaniu repozytorium MariaDB możesz zainstalować MariaDB za pomocą narzędzia do zarządzania pakietami yum, jak pokazano.

yum install MariaDB-client MariaDB-server

7. Następnie zabezpiecz instalację serwera bazy danych, korzystając z poniższego skryptu. Ustaw hasło roota i odpowiedz y, a następnie naciśnij [Enter] w przypadku pozostałych pytań, aby wyłączyć zdalne logowanie użytkownika root, usunąć konta użytkowników anonimowych i przetestować bazę danych, która default mogą być dostępne dla wszystkich użytkowników, nawet anonimowych.

mysql_secure_installation

Przeczytaj także: 12 najlepszych praktyk dotyczących bezpieczeństwa MySQL/MariaDB w systemie Linux

Krok 4: Instalowanie wielu wersji PHP

8. Aby zainstalować różne wersje PHP dla swoich projektów, użyj polecenia yum-config-manager, aby zainstalować wiele wersji PHP wraz z większością wymaganych modułów, jak pokazano.

Zainstaluj wersję 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

Zainstaluj wersję 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 zainstalowaniu PHP możesz użyć poniższego polecenia, aby sprawdzić domyślną wersję PHP używaną na Twoim serwerze.

php -v

Krok 5: Konfiguracja PHP-FPM i PHP56-PHP-FPM

10. To najciekawsza część tego samouczka, wyjaśnia, w jaki sposób możesz uruchomić wiele wersji PHP na swoim serwerze. Tutaj skonfigurujesz różne wersje php-fpm, z którymi będzie współpracował Nginx. Powinieneś zdefiniować użytkownika/grupę procesów FastCGI, a także porty, na których będą nasłuchiwać.

Są to dwa poniższe pliki konfiguracyjne, które będziesz edytować.

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

Otwórz powyższe pliki, ustaw użytkownika/grupę procesów 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] 

Domyślnymi wartościami powinny być Apache. Zmień je na nginx, jak pokazano.

user = nginx
group = nginx

11. Następnie znajdź parametry nasłuchiwania i zdefiniuj adres:port, na którym będą odbierane żądania FastCGI.

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

12. Po wykonaniu całej powyższej konfiguracji musisz uruchomić i włączyć Nginx, MariaDB i PHP-FPM aby automatycznie uruchomić się przy starcie systemu.

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 

Uwaga: w przypadku wystąpienia błędów podczas uruchamiania drugiej instancji PHP, php56-php-fpm, polityka SELinux może blokować to od startu. Jeśli SELinux jest w trybie wymuszania, ustaw go na tryb zezwalania, a następnie spróbuj ponownie uruchomić usługę.

getenforce
setenforce 0 

Krok 6: Skonfiguruj strony internetowe z uprawnieniami

13. W tym momencie możesz teraz utworzyć niezbędne katalogi dla swoich witryn internetowych pod adresem /var/www/html/. Musisz także utworzyć katalogi do przechowywania dzienników w następujący sposób:

---------------- 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. Ustaw odpowiednie uprawnienia własności do wszystkich katalogów.

---------------- 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: Skonfiguruj bloki serwera Nginx dla stron internetowych

15. Teraz skonfiguruj sposób, w jaki Nginx będzie przetwarzał żądania kierowane do Twoich witryn internetowych, korzystając z plików konfiguracyjnych bloku serwera, które powinny znajdować się w /etc/nginx/conf.d/.

Utwórz pliki konfiguracyjne dla swoich stron internetowych z rozszerzeniem .conf.

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

Następnie wklej następujące konfiguracje bloków serwera w odpowiednich plikach.

Strona internetowa 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;

        }
}

Strona internetowa 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. Upewnij się, że w końcowej części bloku http w pliku /etc/nginx/nginx.conf znajduje się następujący wiersz. Pomaga dołączyć wszystkie pliki konfiguracyjne do katalogu /etc/nginx/conf.d/, gdy działa Nginx.

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

Krok 8: Testowanie różnych wersji PHP

17. Na koniec musisz sprawdzić, czy Twój serwer używa dwóch wersji PHP. Możesz utworzyć bardzo prosty skrypt info.php w katalogach głównych dokumentów w swoich witrynach internetowych, jak pokazano.

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

18. Aby zastosować wszystkie zmiany wprowadzone powyżej, musisz ponownie uruchomić Nginx, php-fpm i php56-php- fpm. Ale możesz przede wszystkim sprawdzić, czy pliki konfiguracyjne Nginx nie zawierają błędów składniowych, zanim to zrobisz.

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

19. Jest jeszcze jedna ostatnia rzecz do zrobienia, szczególnie jeśli uruchamiasz swój serwer lokalnie, musisz skonfigurować lokalny DNS za pomocą pliku /etc/hosts, jak pokazano w zrzut ekranu poniżej.

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. Na koniec otwórz przeglądarkę internetową i wpisz poniższe adresy, aby sprawdzić wersje PHP zainstalowane w systemie.

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

Otóż to! Teraz możesz wdrażać pliki i testować strony internetowe z różnymi wersjami PHP. Jeśli chcesz coś dodać lub zadać pytania, skorzystaj z poniższego formularza komentarzy.