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
- Serwer CentOS 7 lub RHEL 7 przy minimalnej instalacji.
- Serwer HTTP Nginx.
- PHP 7.1 (do użycia jako wersja domyślna) i 5.6.
- Serwer bazy danych MariaDB.
- Adres IP serwera: 192.168.56.10.
- 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.