Apache và PHP-FPM có thể được kết hợp để lưu trữ nhiều ứng dụng web PHP sử dụng các phiên bản PHP khác nhau trên cùng một máy chủ để tiết kiệm chi phí. Khi sử dụng Apache với PHP-FPM, bạn có thể tùy chỉnh cấu hình để quản lý lưu trữ và triển khai ứng dụng. Để có thể vận hành nhiều phiên bản PHP trên một máy chủ bằng Apache và PHP-FPM trên CentOS 7, hãy cùng tìm hiểu bài viết dưới đây của mình nhé.
Những điểm chính
- Nắm được các yêu cầu cần thiết trước khi thực hiện các thao tác.
- Hướng dẫn chi tiết cách cài đặt và cấu hình môi trường để chạy nhiều phiên bản PHP với Apache và PHP-FPM trên CentOS 7.
- Biết đến dịch vụ VPS mạnh mẽ từ Vietnix để đảm bảo hiệu suất và ổn định cho máy chủ.
- Giải đáp một số câu hỏi thường gặp khi chạy nhiều phiên bản PHP trên CentOS 7.
Yêu cầu để có thể chạy nhiều phiên bản PHP với Apache và PHP-FPM trên CentOS 7
- Một máy chủ CentOS 7 có ít nhất 1GB RAM, tài khoản user non-root có quyền sudo và tường lửa. Vietnix cung cấp dịch vụ cho thuê VPS hỗ trợ Centos đáp ứng các yêu cầu về thông số này.
- Apache web server được thiết lập và cấu hình trên CentOS 7. (Hướng dẫn chi tiết tại đây)
- Một tên miền được cấu hình để trỏ đến máy chủ CentOS 7. Trong bài viết này sẽ sử dụng hai tên miền phụ, mỗi tên miền được chỉ định với một bản ghi
A
trong cài đặt DNS:site1.your_domain
vàsite2.your_domain
.
Để đảm bảo các ứng dụng PHP của bạn, dù chạy trên bất kỳ phiên bản nào, đều hoạt động mượt mà và ổn định, một môi trường máy chủ với hiệu suất cao là cực kỳ quan trọng. VPS NVMe Vietnix là lựa chọn lý tưởng, cung cấp tốc độ xử lý dữ liệu vượt trội nhờ ổ cứng NVMe Enterprise cao cấp và CPU Intel Xeon Platinum. Điều này không chỉ giúp các phiên bản PHP-FPM hoạt động hiệu quả hơn mà còn đảm bảo các website của bạn tải nhanh chóng, mang lại trải nghiệm tốt nhất cho người dùng.

VPS NVME – Ổ CỨNG VÀ CPU THẾ HỆ MỚI
Khả năng xử lý siêu khủng với ổ cứng NVMe và CPU Platinum, tối ưu cho các ứng dụng PHP
Bước 1: Cài đặt phiên bản PHP 7.0 và PHP 7.2 với PHP-FPM
Tiến hành cài đặt PHP với phiên bản 7.0 và 7.2. Kho lưu trữ SCL (Software Collections) duy trì nhiều phiên bản của PHP trên hệ thống CentOS 7. Nếu bạn muốn phiên bản PHP mới nhất nhưng không có sẵn trên SCL, hãy kiểm tra remi PPA (gói lưu trữ cá nhân).
Cài đặt kho lưu trữ SCL vào hệ thống của bạn với lệnh:
sudo yum install centos-release-scl -y
Xem những phiên bản PHP 7 nào có sẵn trên SCL bằng lệnh:
sudo yum list rh-php7[0-9].x86_64
Bạn sẽ thấy output như sau:
Output
Available Packages
rh-php70.x86_64 2.3-1.el7 centos-sclo-rh
rh-php71.x86_64 1-1.el7 centos-sclo-rh
rh-php72.x86_64 1-2.el7 centos-sclo-rh
rh-php73.x86_64 1-1.el7 centos-sclo-rh
Thiết lập phiên bản PHP 7.0 bằng cách cài đặt rh-php70
và rh-php70-php-fpm
:
sudo yum install rh-php70 rh-php70-php-fpm -y
rh-php70
là một metapackage chạy các ứng dụng PHP.- rh-php70-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.
Tiếp theo đến phiên bản PHP 7.2. Hãy cài đặt rh-php72
và rh-php72-php-fpm
.
sudo yum install rh-php72 rh-php72-php-fpm -y
Kế tiếp, tiến hành chạy các lệnh sau để bắt đầu sử dụng cả hai phiên bản:
sudo scl enable rh-php70 bash
sudo scl enable rh-php72 bash
Theo mặc định, cả hai phiên bản PHP đều listening trên port 9000
. Nhưng trong hướng dẫn này sẽ thực hiện chạy hai phiên bản cùng một lúc. Do đó sẽ chỉ định hai port mới:
Để thực hiện thao tác này, bạn có thể mở /etc/opt/rh/rh-php70/php-fpm.d/www.conf
trong trình soạn thảo của bạn và thay đổi toàn bộ port từ 9000
thành 9002
. Sau đó lưu và đóng file.
Lặp lại thao tác trên cho /etc/opt/rh/rh-php72/php-fpm.d/www.conf
, tuy nhiên ở file này bạn sẽ đổi toàn bộ port từ 9000
thành 9003
. Ngoài ra, bạn cũng có thể sử dụng hai lệnh sed
này để thay thế 2 thao tác trên:
sudo sed -i 's/:9000/:9002/' /etc/opt/rh/rh-php70/php-fpm.d/www.conf
sudo sed -i 's/:9000/:9003/' /etc/opt/rh/rh-php72/php-fpm.d/www.conf
Đến đây, bạn đã chỉ định một port riêng cho mỗi phiên bản PHP của mình. Tuy nhiên, trước khi áp dụng các thay đổi trên, bạn phải thêm các port vào cấu hình SELinux của mình.
SELinux là từ viết tắt của Security Enhanced Linux và nó được kích hoạt theo mặc định trên CentOS 7. Bạn phải thêm các port 9002
và 9003
vào database SELinux và gán vào httpd, nếu không các ứng dụng của bạn sẽ không thể hoạt động. Sử dụng lệnh semanage để thực hiện tác vụ này:
sudo semanage port -a -t http_port_t -p tcp 9002
sudo semanage port -a -t http_port_t -p tcp 9003
-a
cho biết rằng bạn đang thêm một đối tượng vào database. -t
chỉ định loại đối tượng, trong trường hợp này là http_port_t
. Và -p
chỉ định giao thức tcp.
Tới đây, bạn có thể bắt đầu và kích hoạt PHP. Bắt đầu với rh-php70-php-fpm
và cho phép nó bắt đầu khi khởi động:
sudo systemctl start rh-php70-php-fpm
sudo systemctl enable rh-php70-php-fpm
Tiếp theo, xác định trạng thái của rh-php70-php-fpm
:
sudo systemctl status rh-php70-php-fpm
Bạn sẽ nhận được output như sau:
Output
● rh-php70-php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/rh-php70-php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2020-04-18 04:49:59 UTC; 1min 6s ago
Main PID: 1852 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
CGroup: /system.slice/rh-php70-php-fpm.service
├─1852 php-fpm: master process (/etc/opt/rh/rh-php70/php-fpm.conf)
├─1853 php-fpm: pool www
├─1854 php-fpm: pool www
├─1855 php-fpm: pool www
├─1856 php-fpm: pool www
└─1857 php-fpm: pool www
Apr 18 04:49:59 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Starting The PHP FastCGI Process Manager...
Apr 18 04:49:59 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Started The PHP FastCGI Process Manager.
Thực hiện lại quá trình này đối với phiên bản PHP 7.2, khởi động rh-php72-php-fpm
và cho phép nó bắt đầu khi khởi động:
sudo systemctl start rh-php72-php-fpm
sudo systemctl enable rh-php72-php-fpm
Tiếp theo, xác định trạng thái của rh-php72-php-fpm
:
sudo systemctl status rh-php72-php-fpm
Bạn cũng sẽ nhận được một output khác:
Output
● rh-php72-php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/rh-php72-php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2020-04-18 04:50:04 UTC; 1min 59s ago
Main PID: 1876 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
CGroup: /system.slice/rh-php72-php-fpm.service
├─1876 php-fpm: master process (/etc/opt/rh/rh-php72/php-fpm.conf)
├─1877 php-fpm: pool www
├─1878 php-fpm: pool www
├─1879 php-fpm: pool www
├─1880 php-fpm: pool www
└─1881 php-fpm: pool www
Apr 18 04:50:04 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Starting The PHP FastCGI Process Manager...
Apr 18 04:50:04 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Started The PHP FastCGI Process Manager.
Bước 2: Tạo cấu trúc thư mục cho cả hai trang web
Bạn tạo một document root và một trang index cho mỗi trang web trong số hai trang web của bạn.
Đầu tiên, tạo document root cho cả site1.your_domain và site2.your_domain:
sudo mkdir /var/www/site1.your_domain
sudo mkdir /var/www/site2.your_domain
Theo mặc định, Apache web server hoạt động như một apache
user và một apache
group. Vì vậy, / var / www/
và tất cả các file và thư mục con của nó cũng phải thuộc sở hữu của chúng. Thực thi các lệnh sau để xác minh quyền sở hữu và quyền truy cập ở mỗi thư mục root của từng trang web của bạn:
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 thư mục thành apache
user và apache
group. Lệnh chmod
thay đổi các quyền truy cập được liên kết với user và group.
Bạn tạo file info.php
bên trong mỗi thư mục root của trang web. Việc này sẽ hiển thị thông tin phiên bản PHP của mỗi trang web. Thực hiện với site1:
sudo vi /var/www/site1.your_domain/info.php
Thêm dòng lệnh sau:
<?php phpinfo(); ?>
Lưu và đóng file. Sau đó copy file info.php
vào site2:
sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php
Như vậy web server của bạn đã có các thư mục root để cung cấp data cho khách truy cập.
Bước 3: Cấu hình Apache cho cả hai trang web
Tạo file config cho máy ảo trong thư mục /etc/httpd/conf.d/
. Điều này sẽ cho phép hai trang web của bạn hoạt động đồng thời với hai phiên bản PHP khác nhau.
Đầu tiên hãy tạo một file config máy chủ ảo mới cho site1.your_domain
. Ở đây bạn sẽ sử dụng phiên bản PHP 7.0 để thực hiện việc cài đặt cấu hình:
sudo vi /etc/httpd/conf.d/site1.your_domain.conf
Thực hiện thêm nội dung như hướng dẫn dưới đây. Đảm bảo đường dẫn thư mục trang web, tên máy chủ, port và phiên bản PHP khớp với các thiết lập của bạn:
<VirtualHost *:80>
ServerAdmin admin@site1.your_domain
ServerName site1.your_domain
DocumentRoot /var/www/site1.your_domain
DirectoryIndex info.php
SetHandler "proxy:fcgi://127.0.0.1:9002
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
AddHandler php70-fcgi .php
Action php70-fcgi /cgi-bin/php70.fcgi
ErrorLog /var/log/httpd/site1.your_domain_error.log
CustomLog /var/log/httpd/site1.your_domain_access.log combined
</VirtualHost>
Đối với DocumentRoot
, bạn đang chỉ định đường dẫn của thư mục root của trang web. Ở mục ServerAdmin
, bạn đang thêm một email mà admin trang web your_domain
có thể truy cập. Đối với ServerName
, bạn đang thêm url cho subdomain đầu tiên. Ở mục SetHandler
, bạn chỉ định port 9002
. Các cài đặt còn lại cũng cấu hình dịch vụ của bạn để triển khai PHP 7.0.
Sau đó hãy lưu và đóng file.
Tiếp theo, tạo một file config máy chủ ảo mới cho site2.your_domain
. Thực hiện thao thác tương tự đối với phiên bản PHP 7.2 :
sudo vi /etc/httpd/conf.d/site2.your_domain.conf
Thêm các nội dung như hướng dẫn dưới đây. Đảm bảo đường dẫn thư mục trang web, tên máy chủ, cổng và phiên bản PHP khớp với thông tin của bạn:
<VirtualHost *:80>
ServerAdmin admin@site2.your_domain
ServerName site2.your_domain
DocumentRoot /var/www/site2.your_domain
DirectoryIndex info.php
SetHandler "proxy:fcgi://127.0.0.1:9003
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
AddHandler php72-fcgi .php
Action php72-fcgi /cgi-bin/php72.fcgi
ErrorLog /var/log/httpd/site2.your_domain_error.log
CustomLog /var/log/httpd/site2.your_domain_access.log combined
</VirtualHost>
Lưu và đóng file sau khi bạn hoàn tất. Kiểm tra file config Apache có lỗi cú pháp không bằng cách thực hiện lệnh dưới đây:
sudo apachectl configtest
Nếu thực hiện đúng, bạn sẽ nhận được output:
Output
Syntax OK
Cuối cùng, khởi động lại Apache để áp dụng các thay đổi của bạn:
sudo systemctl restart httpd
Bước 4: Kiểm tra cả hai trang web
Đến đây bạn đã config hai trang web để chạy hai phiên bản khác nhau của PHP. Bây giờ, hãy kiểm tra kết quả.
Mở trình duyệt web của bạn và truy cập cả hai trang web http://site1.your_domain
và http://site2.your_domain
. Bạn sẽ thấy hai giao diện như thế này:


Hãy chú ý phần tiêu đề, site1.your_domain
triển khai PHP phiên bản 7.0, còn site2.your_domain
triển khai phiên bản PHP 7.2.
Bây giờ bạn đã hoàn thành việc kiểm tra các trang web của mình, hãy xóa các file info.php
. Vì nó chứa thông tin quan trọng về máy chủ của bạn và có thể bị rò rỉ và gây ra lỗ hổng bảo mật. Thực hiện việc xóa các file như sau:
sudo rm -rf /var/www/site1.your_domain/info.php
sudo rm -rf /var/www/site2.your_domain/info.php
Bây giờ bạn có CentOS 7 server xử lý hai trang web với hai phiên bản PHP khác nhau. Tuy nhiên, PHP-FPM không giới hạn trong một ứng dụng này.
Nếu máy chủ của bạn có đủ khả năng xử lý, số lượng trang web PHP và phiên bản PHP mà dịch vụ Apache có thể xử lý là không giới hạn. Với VPS của Vietnix, bạn có thể dễ dàng mở rộng số lượng website và phiên bản PHP mà không lo về tài nguyên, biến mọi ý tưởng triển khai của bạn thành hiện thực một cách mượt mà và hiệu quả.
VPS Vietnix: Nền tảng vững chắc cho mọi ứng dụng PHP đa phiên bản
Với hơn 13 năm kinh nghiệm trong lĩnh vực cung cấp giải pháp máy chủ, Vietnix đã trở thành lựa chọn tin cậy của hơn 100.000 khách hàng cá nhân và doanh nghiệp. Vietnix cam kết mang đến những dịch vụ VPS chất lượng cao, đảm bảo uptime lên đến 99.9%, giúp các ứng dụng web của bạn vận hành liên tục và ổn định. Đội ngũ kỹ thuật của Vietnix với chuyên môn cao luôn túc trực 24/7, sẵn sàng giải quyết mọi vấn đề phát sinh, hỗ trợ bạn tối đa trong việc triển khai và quản lý môi trường máy chủ phức tạp.
Thông tin liên hệ:
- Hotline: 18001093.
- Email: sales@vietnix.com.vn.
- Địa chỉ: 265 Hồng Lạc, Phường Bảy Hiền, Thành Phố Hồ Chí Minh.
- Website: https://vietnix.vn/.
Câu hỏi thường gặp
Sự khác biệt giữa PHP-FPM và mod_php là gì?
– mod_php (Apache Module): Là một module của Apache, nhúng trực tiếp trình thông dịch PHP vào tiến trình của Apache. Mỗi khi Apache xử lý một yêu cầu PHP, nó sẽ khởi tạo một tiến trình PHP riêng, điều này có thể tốn nhiều tài nguyên hơn, đặc biệt khi có nhiều yêu cầu đồng thời. Nó đơn giản để cài đặt nhưng kém hiệu quả hơn trong việc quản lý tài nguyên và không cho phép chạy nhiều phiên bản PHP cùng lúc dễ dàng.
– PHP-FPM (FastCGI Process Manager): Là một trình quản lý tiến trình FastCGI dành cho PHP. PHP-FPM chạy dưới dạng một dịch vụ độc lập và giao tiếp với web server (Apache hoặc Nginx) thông qua giao thức FastCGI. Nó tạo ra các nhóm tiến trình (pools) PHP riêng biệt, mỗi nhóm có thể được cấu hình để chạy một phiên bản PHP cụ thể hoặc với các cài đặt riêng. Điều này giúp tối ưu hóa hiệu suất, quản lý tài nguyên tốt hơn và cho phép chạy nhiều phiên bản PHP đồng thời.
Chạy nhiều phiên bản PHP trên một máy chủ có ảnh hưởng đến hiệu suất không?
Việc chạy nhiều phiên bản PHP trên một máy chủ có thể ảnh hưởng đến hiệu suất nếu máy chủ không có đủ tài nguyên (RAM, CPU). Mỗi phiên bản PHP-FPM pool sẽ tiêu tốn một lượng RAM và CPU nhất định. Tuy nhiên, nếu bạn sử dụng một VPS có đủ tài nguyên và cấu hình PHP-FPM pools hợp lý (ví dụ: giới hạn số lượng tiến trình con), hiệu suất vẫn có thể được duy trì ở mức tốt. PHP-FPM được thiết kế để quản lý tài nguyên hiệu quả hơn so với mod_php, giúp giảm thiểu ảnh hưởng này.
Làm thế nào để quản lý các modules PHP khác nhau cho mỗi phiên bản?
Mỗi phiên bản PHP được cài đặt qua SCL thường đi kèm với các modules riêng biệt và được quản lý độc lập. Khi bạn cài đặt rh-php70
, các modules như rh-php70-php-mysqlnd
hoặc rh-php70-php-gd
sẽ được cài đặt riêng cho phiên bản 7.0. Điều này có nghĩa là bạn có thể cài đặt hoặc gỡ bỏ các modules cho từng phiên bản PHP mà không ảnh hưởng đến các phiên bản khác. Các file cấu hình php.ini
cũng sẽ nằm trong các thư mục riêng biệt cho từng phiên bản (ví dụ: /etc/opt/rh/rh-php70/php.ini
, /etc/opt/rh/rh-php72/php.ini
), cho phép tùy chỉnh độc lập.
Như vậy bạn đã kết hợp được virtual hosts và PHP-FPM để phục vụ cho nhiều trang web và nhiều phiên bản PHP trên một máy chủ duy nhất. Nếu máy chủ của bạn có đủ khả năng xử lý thì số lượng trang web PHP và phiên bản PHP mà dịch vụ Apache có thể xử lý là không giới hạn. Cảm ơn các bạn đọc bài hướng dẫn về cách chạy nhiều phiên bản PHP với Apache và PHP-FPM trên CentOS 7, nếu có góp ý hay thắc mắc nào hãy để lại bình luận bên dưới nhé.