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 stderr
và stdout
, 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_domain
vàsite2.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:
OutputRemi'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 php73
và php73-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 php74
và php74-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.your và site2.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 apache và apache 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:
<?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:
<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:
<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_domain
và http:// site2.your_domain
. Bạn sẽ thấy hai trang trông như thế này:
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 sdtout
và stderr
. 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.
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 72020-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