Thứ năm, 04/06/2020 | 00:00 GMT+7

Cách chạy nhiều phiên bản PHP trên một server bằng Apache và PHP-FPM trên CentOS 8

Máy chủ web Apache sử dụng server ảo để quản lý nhiều domain trên một version duy nhất. Tương tự, PHP-FPM sử dụng daemon để quản lý nhiều version PHP trên một version duy nhất. Cùng với nhau, bạn có thể sử dụng Apache và PHP-FPM để lưu trữ nhiều ứng dụng web PHP, mỗi ứng dụng sử dụng một version PHP khác nhau, tất cả trên cùng một server và tất cả cùng một lúc. Điều này rất hữu ích vì các ứng dụng khác nhau có thể yêu cầu các version PHP khác nhau, nhưng một số ngăn xếp server , như LAMP được cấu hình thường xuyên , chỉ có thể quản lý một ngăn xếp . Kết hợp Apache với PHP-FPM cũng là một giải pháp tiết kiệm chi phí hơn so với lưu trữ từng ứng dụng trên version riêng của nó.

PHP-FPM cũng cung cấp các tùy chọn cấu hình cho ghi log stderrstdout , khởi động lại khẩn cấp và tạo quy trình thích ứng, rất hữu ích cho các trang web tải nặng. Trên thực tế, sử dụng Apache với PHP-FPM là một trong những cách tốt nhất để lưu trữ các ứng dụng PHP, đặc biệt là khi nói đến hiệu suất.

Trong hướng dẫn này, bạn sẽ cài đặt hai trang web PHP trên một version duy nhất. Mỗi trang web sẽ sử dụng domain riêng và mỗi domain sẽ triển khai version PHP của riêng mình. Đầu tiên, site1.your_domain , sẽ triển khai PHP 7.3. Thứ hai, site2.your_domain , sẽ triển khai PHP 7.4.

Yêu cầu

  • Một server CentOS 8 với ít nhất 1GB RAM được cài đặt bằng cách thực hiện theo Cài đặt server ban đầu với CentOS 8 , bao gồm user không phải root sudo và firewall .
  • Web server Apache được cài đặt và cấu hình theo Cách cài đặt web server Apache trên CentOS 8 .
  • Tên domain được cấu hình để trỏ đến server CentOS 8 của bạn. Bạn có thể tìm hiểu cách trỏ domain tới DigitalOcean Server theo Cách trỏ đến server tên DigitalOcean từ các công ty đăng ký domain chung . Với mục đích của hướng dẫn này, bạn sẽ sử dụng hai domain phụ, mỗi domain được chỉ định với một bản ghi A trong cài đặt DNS của bạn: site1.your_domainsite2.your_domain .

Bước 1 - Cài đặt các version PHP 7.3 và 7.4 với PHP-FPM

Với các yêu cầu đã hoàn thành, bây giờ bạn sẽ cài đặt version PHP 7.3 và 7.4, cũng như PHP-FPM và một số phần mở rộng bổ sung. Để cài đặt nhiều version PHP, bạn cần cài đặt và kích hoạt repository Remi cho hệ thống của bạn . Điều này cũng cung cấp các version mới nhất của ngăn xếp PHP trên hệ thống CentOS 8.

Bạn có thể thêm cả hai repository vào hệ thống của bạn bằng các lệnh dưới đây:

  • sudo dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm

Lệnh trên cũng sẽ kích hoạt kho EPEL.

Trước tiên, hãy khám phá những version PHP 7 có sẵn trên Remi:

  • sudo dnf module list php

Bạn sẽ thấy một kết quả như thế này:

Output
Remi's Modular repository for Enterprise Linux 8 - x86_64 Name Stream Profiles Summary php remi-7.2 common [d], devel, minimal PHP scripting language php remi-7.3 common [d], devel, minimal PHP scripting language php remi-7.4 common [d], devel, minimal PHP scripting language

Tiếp theo, tắt module PHP mặc định và bật module PHP7.3 của Remi bằng lệnh dưới đây:

  • sudo dnf module reset php
  • sudo dnf module enable php:remi-7.3

Hãy bắt đầu cài đặt php73php73-php-fpm :

  • sudo dnf install php73 php73-php-fpm -y
  • php73 là một gói siêu nhỏ được dùng để chạy ứng dụng PHP.
  • php73-php-fpm cung cấp trình thông dịch Fast Process Manager chạy dưới dạng daemon và nhận các yêu cầu Fast / CGI.

Bây giờ lặp lại quy trình cho version PHP 7.4. Cài đặt php74php74-php-fpm .

  • sudo dnf module reset php
  • sudo dnf module enable php:remi-7.4
  • sudo dnf install php74 php74-php-fpm -y

Sau khi cài đặt cả hai version PHP, hãy khởi động dịch vụ php73-php-fpm và cho phép nó khởi động khi server khởi động bằng các lệnh sau:

  • sudo systemctl start php73-php-fpm
  • sudo systemctl enable php73-php-fpm

Tiếp theo, xác minh trạng thái của dịch vụ php73-php-fpm bằng các lệnh sau:

  • sudo systemctl status php73-php-fpm

Bạn sẽ thấy kết quả sau:

  • ● php73-php-fpm.service - The PHP FastCGI Process Manager
  • Loaded: loaded (/usr/lib/systemd/system/php73-php-fpm.service; enabled; vendor preset: disabled)
  • Active: active (running) since Wed 2020-04-22 05:14:46 UTC; 52s ago
  • Main PID: 14206 (php-fpm)
  • Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
  • Tasks: 6 (limit: 5059)
  • Memory: 25.9M
  • CGroup: /system.slice/php73-php-fpm.service
  • ├─14206 php-fpm: master process (/etc/opt/remi/php73/php-fpm.conf)
  • ├─14207 php-fpm: pool www
  • ├─14208 php-fpm: pool www
  • ├─14209 php-fpm: pool www
  • ├─14210 php-fpm: pool www
  • └─14211 php-fpm: pool www
  • Apr 22 05:14:46 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Starting The PHP FastCGI Process Manager...
  • Apr 22 05:14:46 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Started The PHP FastCGI Process Manager.

Lặp lại quá trình này, bây giờ hãy khởi động dịch vụ php74-php-fpm và cho phép nó khởi động khi server khởi động bằng các lệnh sau:

  • sudo systemctl start php74-php-fpm
  • sudo systemctl enable php74-php-fpm

Và sau đó xác minh trạng thái của dịch vụ php74-php-fpm bằng các lệnh sau:

  • sudo systemctl status php74-php-fpm

Bạn sẽ thấy kết quả sau:

  • ● php74-php-fpm.service - The PHP FastCGI Process Manager
  • Loaded: loaded (/usr/lib/systemd/system/php74-php-fpm.service; enabled; vendor preset: disabled)
  • Active: active (running) since Wed 2020-04-22 05:16:16 UTC; 23s ago
  • Main PID: 14244 (php-fpm)
  • Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
  • Tasks: 6 (limit: 5059)
  • Memory: 18.8M
  • CGroup: /system.slice/php74-php-fpm.service
  • ├─14244 php-fpm: master process (/etc/opt/remi/php74/php-fpm.conf)
  • ├─14245 php-fpm: pool www
  • ├─14246 php-fpm: pool www
  • ├─14247 php-fpm: pool www
  • ├─14248 php-fpm: pool www
  • └─14249 php-fpm: pool www
  • Apr 22 05:16:15 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Starting The PHP FastCGI Process Manager...
  • Apr 22 05:16:16 centos-s-1vcpu-1gb-nyc3-01 systemd[1]: Started The PHP FastCGI Process Manager.

Đến đây, bạn đã cài đặt hai version PHP trên server của bạn . Tiếp theo, bạn sẽ tạo cấu trúc folder cho từng trang web mà bạn muốn triển khai.

Bước 2 - Tạo cấu trúc folder cho cả hai trang web

Trong phần này, bạn sẽ tạo một folder root tài liệu và một trang index cho hai trang web của bạn .

Đầu tiên, tạo folder root tài liệu cho cả tên domain site1.yoursite2.yourdomain :

  • sudo mkdir /var/www/site1.your_domain
  • sudo mkdir /var/www/site2.your_domain

Theo mặc định, Apache webserver chạy như một người sử dụng apacheapache group . Để đảm bảo bạn có quyền sở hữu và quyền chính xác đối với folder root trang web của bạn , hãy thực hiện các lệnh sau:

  • sudo chown -R apache:apache /var/www/site1.your_domain
  • sudo chown -R apache:apache /var/www/site2.your_domain
  • sudo chmod -R 755 /var/www/site1.your_domain
  • sudo chmod -R 755 /var/www/site2.your_domain

Lệnh chown thay đổi quyền sở hữu hai folder trang web thành user apache và group apache . Lệnh chmod thay đổi các quyền được liên kết với user và group đó, cũng như những người khác.

Tiếp theo, bạn sẽ tạo một file info.php bên trong mỗi folder root của trang web. Điều này sẽ hiển thị thông tin version PHP của mỗi trang web. Bắt đầu với site1 :

  • sudo vi /var/www/site1.your_domain/info.php

Thêm dòng sau:

site1.your_domain / info.php '> / var / www / site1.your_domain /info.php
<?php phpinfo(); ?> 

Lưu và đóng file . Bây giờ sao chép file info.php bạn đã tạo vào site2 :

  • sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php

Web server của bạn hiện có các folder root tài liệu mà mỗi trang web yêu cầu để cung cấp dữ liệu cho khách truy cập. Tiếp theo, bạn sẽ cấu hình web server Apache của bạn để hoạt động với hai version PHP khác nhau.

Bước 3 - Cấu hình Apache cho cả hai trang web

Trong phần này, bạn sẽ tạo hai file cấu hình server ảo. Điều này sẽ cho phép hai trang web hoạt động đồng thời với hai version PHP khác nhau.

Để Apache phục vụ nội dung này, cần tạo file server ảo với các lệnh chính xác. Bạn sẽ tạo hai file cấu hình server ảo mới bên trong folder /etc/httpd/conf.d/ .

Đầu tiên, hãy tạo một file cấu hình server ảo mới cho trang web site1.your_domain . Tại đây bạn sẽ hướng Apache kết xuất nội dung bằng php7.3 :

  • sudo vi /etc/httpd/conf.d/site1.your_domain.conf

Thêm nội dung sau. Đảm bảo rằng đường dẫn folder trang web, tên server và version PHP trùng với cài đặt của bạn:

/etc/httpd/conf.d/site1.your_domain.conf
<VirtualHost *:80>      ServerAdmin admin@site1.your_domain      ServerName site1.your_domain      DocumentRoot /var/www/site1.your_domain      DirectoryIndex info.php      ErrorLog /var/log/httpd/site1.your_domain-error.log      CustomLog /var/log/httpd/site1.your_domain-access.log combined    <IfModule !mod_php7.c>     <FilesMatch \.(php|phar)$>         SetHandler "proxy:unix:/var/opt/remi/php73/run/php-fpm/www.sock|fcgi://localhost"     </FilesMatch>   </IfModule>  </VirtualHost> 

Đối với DocumentRoot bạn đang chỉ định đường dẫn của folder root trang web của bạn . Đối với ServerAdmin bạn đang thêm một email mà administrator your_domain site có thể truy cập. Đối với ServerName bạn đang thêm url cho domain phụ đầu tiên của bạn . Đối với SetHandler, bạn đang chỉ định file socket PHP-FPM cho php7.3.

Lưu và đóng file .

Tiếp theo, tạo file cấu hình server ảo mới cho trang web site2.your_domain . Bạn sẽ chỉ định domain phụ này để triển khai php7.4 :

  • sudo vi /etc/httpd/conf.d/site2.your_domain.conf

Thêm nội dung sau. , hãy đảm bảo đường dẫn folder trang web, tên server và version PHP trùng với thông tin duy nhất của bạn:

/etc/httpd/conf.d/site2.your_domain.conf
<VirtualHost *:80>      ServerAdmin admin@site2.your_domain      ServerName site2.your_domain      DocumentRoot /var/www/site2.your_domain      DirectoryIndex info.php      ErrorLog /var/log/httpd/site2.your_domain-error.log      CustomLog /var/log/httpd/site2.your_domain-access.log combined   <IfModule !mod_php7.c>     <FilesMatch \.(php|phar)$>         SetHandler "proxy:unix:/var/opt/remi/php74/run/php-fpm/www.sock|fcgi://localhost"     </FilesMatch>   </IfModule>  </VirtualHost> 

Lưu file khi bạn hoàn tất. Sau đó, kiểm tra file cấu hình Apache để tìm bất kỳ lỗi cú pháp nào bằng lệnh sau:

  • sudo apachectl configtest

Bạn sẽ thấy Syntax OK in kết quả Syntax OK :

Output
  • Syntax OK

Cuối cùng, khởi động lại dịch vụ Apache để thực hiện các thay đổi :

  • sudo systemctl restart httpd

Đến đây bạn đã cấu hình Apache để phục vụ từng trang web, bạn sẽ kiểm tra chúng đảm bảo các version PHP thích hợp đang chạy.

Bước 4 - Kiểm tra cả hai trang web

Đến đây, bạn đã cấu hình hai trang web để chạy hai version PHP khác nhau. Bây giờ kiểm tra kết quả.

Mở trình duyệt web và truy cập cả hai trang web http:// site1.your_domainhttp:// site2.your_domain . Bạn sẽ thấy hai trang trông như thế này:

Trang thông tin PHP 7.3
Trang thông tin PHP 7.4

Lưu ý các tiêu đề. Trang đầu tiên cho biết rằng miền site1.your đã triển khai version PHP 7.3. Thứ hai cho biết site2.yourdomain đã triển khai version PHP 7.4.

Đến đây bạn đã kiểm tra các trang web của bạn , hãy xóa các file info.php . Vì chúng chứa thông tin nhạy cảm về server của bạn và user lạ có thể truy cập được nên chúng có thể gây ra lỗ hổng bảo mật. Để xóa cả hai file , hãy chạy các lệnh sau:

  • sudo rm -rf /var/www/site1.your_domain/info.php
  • sudo rm -rf /var/www/site2.your_domain/info.php

Đến đây bạn có một server CentOS 8 xử lý hai trang web với hai version PHP khác nhau. PHP-FPM, tuy nhiên, không giới hạn cho một ứng dụng này.

Kết luận

Đến đây bạn đã kết hợp server ảo và PHP-FPM để phục vụ nhiều trang web và nhiều version PHP trên một server . Giới hạn thực tế duy nhất về số lượng trang web PHP và version PHP mà dịch vụ Apache của bạn có thể xử lý là sức mạnh xử lý của version của bạn.

Từ đây, bạn có thể cân nhắc khám phá các tính năng nâng cao hơn của PHP-FPM , như quy trình sinh sản thích ứng của nó hoặc cách nó có thể đăng nhập sdtoutstderr . Ngoài ra, giờ đây bạn có thể bảo mật các trang web của bạn bằng certificate TLS / SSL miễn phí từ Let's Encrypt.


Tags:

Các tin liên quan

Cách chạy nhiều phiên bản PHP trên một server bằng Apache và PHP-FPM trên CentOS 7
2020-04-21
Cách chạy nhiều phiên bản PHP trên một server bằng Apache và PHP-FPM trên Debian 10
2020-04-10
Cách chạy nhiều phiên bản PHP trên một server bằng Apache và PHP-FPM trên Ubuntu 18.04
2020-04-02
Cách sử dụng extension PDO PHP để thực hiện giao dịch MySQL bằng PHP trên Ubuntu 18.04
2020-03-25
Cách triển khai ứng dụng PHP với Kubernetes trên Ubuntu 18.04
2019-08-07
Cách triển khai một ứng dụng PHP với Kubernetes trên Ubuntu 16.04
2019-01-18
Cách tạo địa chỉ kỹ thuật số ngắn và duy nhất cho bất kỳ vị trí nào bằng AngularJS và PHP
2018-08-16
Cách thay đổi cài đặt PHP của bạn trên Ubuntu 14.04
2016-03-25
Cách thiết lập XHProf và XHGui để lập profile ứng dụng PHP trên Ubuntu 14.04
2016-02-19
Cách nâng cấp lên PHP 7 trên CentOS 7
2016-01-14