Chạy nhiều phiên bản PHP trên một server: hướng dẫn PHP-FPM
Cách chạy nhiều phiên bản PHP trên một server Ubuntu hoặc Debian với PHP-FPM: cài song song, gán phiên bản cho từng website, xử lý CLI, cron và lỗi thường gặp.

Ý chính
- Với PHP-FPM, mỗi phiên bản PHP chạy như một dịch vụ riêng với socket riêng, nên nhiều phiên bản cùng chạy trên một server không xung đột.
- Web server chọn phiên bản cho từng website bằng cách trỏ tới socket của phiên bản đó.
- Extension và php.ini được cài và cấu hình riêng cho từng phiên bản.
- PHP 7.4, 8.0 và 8.1 đã hết hỗ trợ chính thức; chỉ giữ chúng tạm thời cho ứng dụng cũ.
Chạy nhiều phiên bản PHP trên cùng một server là việc bình thường với PHP-FPM: mỗi phiên bản (ví dụ 8.2, 8.3, 8.4) được cài song song, chạy như một dịch vụ riêng và lắng nghe trên một socket riêng. Web server (nginx hoặc Apache) chỉ cần chuyển request của từng website tới đúng socket, thế là website A chạy PHP 8.2 trong khi website B chạy PHP 8.4. Các phiên bản không đè lên nhau vì mỗi bản có thư mục cấu hình, extension và binary riêng.
Bài này giải thích khi nào bạn cần nhiều phiên bản PHP, cách cài thủ công trên Ubuntu 24.04 và Debian 12, cách gán phiên bản cho từng website, cách xử lý PHP dòng lệnh và cron, và cách làm tương tự trong ZoPanel chỉ bằng vài cú nhấp.
Khi nào cần nhiều phiên bản PHP?
Hầu hết server hosting cần nhiều hơn một phiên bản vì lý do rất thực tế:
- Ứng dụng cũ chưa nâng cấp được. Một website viết từ thời PHP 7.4, theme WordPress cũ hay một module tuỳ biến không chạy trên PHP 8.x.
- Nâng cấp từng bước. Bạn muốn chuyển từng website lên phiên bản mới, kiểm tra, rồi mới chuyển website tiếp theo, thay vì nâng cả server một đêm.
- Yêu cầu của ứng dụng mới. Framework hoặc plugin mới có thể đòi phiên bản PHP mới hơn mức mặc định của hệ điều hành.
- Shared hosting. Khách hàng khác nhau có nhu cầu khác nhau, và chuyển hosting từ cPanel hay DirectAdmin thường mang theo website đang chạy nhiều phiên bản.
Phiên bản PHP nào còn được hỗ trợ?
Theo trang phiên bản được hỗ trợ của PHP và danh sách hết hạn hỗ trợ trên php.net, tại thời điểm viết (tháng 10/2026):
| Phiên bản | Phát hành | Hỗ trợ tích cực tới | Vá bảo mật tới |
|---|---|---|---|
| 7.4 | 2019 | Đã hết | Hết hạn 28/11/2022 |
| 8.0 | 2020 | Đã hết | Hết hạn 26/11/2023 |
| 8.1 | 2021 | Đã hết | Hết hạn 31/12/2025 |
| 8.2 | 08/12/2022 | 31/12/2024 | 31/12/2026 |
| 8.3 | 23/11/2023 | 31/12/2025 | 31/12/2027 |
| 8.4 | 21/11/2024 | 31/12/2026 | 31/12/2028 |
| 8.5 | 20/11/2025 | 31/12/2027 | 31/12/2029 |
Phiên bản PHP có sẵn trong kho của hệ điều hành: Ubuntu 22.04 là 8.1, Ubuntu 24.04 là 8.3, Debian 12 là 8.2 và Debian 13 là 8.4. Bản PHP đi kèm hệ điều hành được nhà phân phối vá bảo mật trong vòng đời của bản phát hành đó, nhưng để có phiên bản khác, bạn cần thêm kho bên ngoài.
WordPress hiện khuyến nghị PHP 8.3 trở lên. PHP 8.2 hết vá bảo mật cuối năm 2026, nên nếu website còn ở 8.2, đây là lúc lên kế hoạch nâng cấp.
Cài nhiều phiên bản PHP thủ công
Bước 1: Thêm kho PHP
Hai kho phổ biến nhất do Ondřej Surý, người bảo trì gói PHP của Debian, duy trì: PPA ondrej/php cho Ubuntu và packages.sury.org cho Debian. Đây là kho bên thứ ba: bạn tin tưởng người bảo trì kho với quyền root trên server, hãy cân nhắc điều đó.
Trên Ubuntu 24.04:
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
Trên Debian 12, làm từng bước theo hướng dẫn của kho (tải gói khoá ký, rồi thêm nguồn):
sudo apt update
sudo apt install -y lsb-release ca-certificates curl
curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
sudo dpkg -i /tmp/debsuryorg-archive-keyring.deb
echo "deb [signed-by=/usr/share/keyrings/debsuryorg-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt update
Bước 2: Cài từng phiên bản với PHP-FPM
Mỗi phiên bản có tiền tố riêng. Cài FPM và các extension website của bạn cần:
sudo apt install -y php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd \
php8.2-mbstring php8.2-xml php8.2-zip php8.2-intl php8.2-opcache
sudo apt install -y php8.4-fpm php8.4-mysql php8.4-curl php8.4-gd \
php8.4-mbstring php8.4-xml php8.4-zip php8.4-intl php8.4-opcache
Mỗi phiên bản giờ có dịch vụ riêng (php8.2-fpm, php8.4-fpm), thư mục cấu hình riêng (/etc/php/8.2/, /etc/php/8.4/) và socket riêng (/run/php/php8.2-fpm.sock, /run/php/php8.4-fpm.sock). Kiểm tra:
systemctl status php8.2-fpm php8.4-fpm --no-pager
ls -l /run/php/
Đừng cài libapache2-mod-php khi chạy nhiều phiên bản: mod_php nạp một phiên bản PHP duy nhất vào Apache. Hãy dùng PHP-FPM cho mọi phiên bản.
Bước 3: Gán phiên bản cho từng website (nginx)
Trong server block của mỗi website, trỏ fastcgi_pass tới socket của phiên bản mong muốn:
# website-cu.vn chạy PHP 8.2
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
# website-moi.vn chạy PHP 8.4
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
}
Kiểm tra cấu hình rồi nạp lại:
sudo nginx -t && sudo systemctl reload nginx
Với Apache dùng mod_proxy_fcgi, cách làm tương tự trong VirtualHost:
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
</FilesMatch>
Bước 4: Tách pool riêng cho từng website
Pool mặc định www chạy mọi website bằng cùng một user (www-data). Nếu một website bị hack, kẻ tấn công đọc được file của website khác. Trên server có nhiều chủ sở hữu, hãy tạo pool riêng cho từng website, chạy bằng user riêng, ví dụ /etc/php/8.2/fpm/pool.d/website-cu.conf:
[website-cu]
user = websitecu
group = websitecu
listen = /run/php/php8.2-website-cu.sock
listen.owner = www-data
listen.group = www-data
pm = ondemand
pm.max_children = 10
pm.process_idle_timeout = 30s
Kiểm tra cú pháp trước khi nạp lại, rồi trỏ nginx tới socket mới:
sudo php-fpm8.2 -t && sudo systemctl reload php8.2-fpm
pm = ondemand giúp pool không giữ tiến trình con khi không có request, quan trọng khi bạn có nhiều phiên bản và nhiều website cùng lúc.
PHP dòng lệnh, Composer và cron
Đây là chỗ hay sai nhất. Lệnh php trên dòng lệnh trỏ tới một phiên bản mặc định, không liên quan gì tới phiên bản website đang dùng qua FPM. Kết quả: cron của website PHP 8.2 lại chạy bằng PHP 8.4 và lỗi.
- Xem phiên bản mặc định:
php -v. - Đổi mặc định cho toàn server:
sudo update-alternatives --set php /usr/bin/php8.3. - Tốt hơn: gọi đích danh phiên bản trong cron và script, không phụ thuộc mặc định:
# crontab của website PHP 8.2
*/5 * * * * /usr/bin/php8.2 /var/www/website-cu.vn/artisan schedule:run
# Composer với đúng phiên bản
php8.2 /usr/local/bin/composer install --no-dev
Lỗi thường gặp khi chạy nhiều phiên bản PHP
- Extension cài cho một phiên bản nhưng không cho bản kia.
php8.3-rediskhông giúp gì cho website chạy 8.2. Khi đổi phiên bản, cài lại đủ extension. - Sửa nhầm php.ini. Mỗi phiên bản có
/etc/php/X.Y/fpm/php.inivà/etc/php/X.Y/cli/php.iniriêng. Sửaupload_max_filesizeở bản 8.4 không ảnh hưởng website chạy 8.2. - Tốn RAM vì nhiều pool chạy thường trực. Mỗi pool PHP-FPM, kể cả khi không có khách, vẫn có tiến trình master chiếm bộ nhớ. Nhân với số phiên bản và số website, con số không nhỏ.
- Quên cập nhật. Phiên bản bạn cài thêm cũng cần
apt upgradethường xuyên như mọi gói khác. - Giữ phiên bản hết hạn quá lâu. PHP 7.4 hay 8.0 không còn được dự án PHP vá lỗi bảo mật. Nếu buộc phải giữ, hãy cách ly website đó, giới hạn quyền, và có kế hoạch nâng cấp cụ thể.
Trước khi nâng phiên bản cho một website, chạy thử trên bản sao (staging), bật hiển thị lỗi trong log và kiểm tra các luồng chính. Công cụ phân tích tĩnh như PHPCompatibility cho PHP_CodeSniffer giúp tìm sớm các hàm đã bị bỏ.
Chạy nhiều phiên bản PHP với ZoPanel
ZoPanel làm sẵn toàn bộ phần trên, kể cả trên gói Free:
- Cài phiên bản. Quản trị viên cài thêm phiên bản ở mục Runtime. ZoPanel hỗ trợ PHP 7.4, 8.0, 8.1, 8.2, 8.3 và 8.4. Có thể chọn ngay khi cài panel:
curl -fsSL https://get.zopanel.net | sudo bash -s -- --php 8.3,8.2, phiên bản đầu tiên là mặc định. - Chọn phiên bản cho website. Khi tạo website, chọn Phiên bản PHP trong số các bản đã cài. Đổi sau này ở tab PHP & cấu hình; pool PHP-FPM của tài khoản được cập nhật tự động, không cần sửa cấu hình nginx.
- Pool riêng cho từng tài khoản. Mỗi tài khoản hosting có pool PHP-FPM riêng cho mỗi phiên bản, chạy bằng user của tài khoản đó, nằm trong giới hạn CPU và RAM của gói. Website của khách này không chung tiến trình PHP với khách khác.
- Pool rảnh tự ngủ. Pool không có request trong thời gian rảnh (mặc định 30 phút) được dừng, rồi khởi động lại trong vài trăm mili giây ở request kế tiếp; mã PHP đã biên dịch được giữ trên đĩa nên trang đầu tiên vẫn nhanh. Nhờ vậy, nhiều phiên bản và nhiều website không giữ RAM khi không có khách. Xem hiệu năng PHP.
- Thiết lập PHP theo website.
upload_max_filesize,max_input_vars,date.timezonevà các tuỳ chọn khác chỉnh trong Công cụ → Thiết lập PHP cho website, ghi vào.user.inicủa đúng website đó.
Khi chuyển từ cPanel, phiên bản PHP của website được đọc từ thiết lập ea-php/alt-php trong bản backup và gán sang phiên bản gần nhất đã cài. Chi tiết ở tài liệu website và PHP và tài liệu chuyển đổi.
Lưu ý thẳng thắn: danh sách phiên bản ZoPanel hỗ trợ hiện dừng ở 8.4. Nếu ứng dụng của bạn bắt buộc PHP 8.5, hãy kiểm tra ghi chú phát hành mới nhất trước khi quyết định.
Kết luận
Chạy nhiều phiên bản PHP trên một server không khó khi bạn nắm ba ý: mỗi phiên bản là một dịch vụ PHP-FPM với socket riêng, web server chọn phiên bản bằng cách trỏ tới socket, và extension, php.ini, CLI đều tách theo phiên bản. Phần còn lại là kỷ luật: gọi đích danh phiên bản trong cron, cách ly từng website, và nâng cấp khỏi phiên bản hết hạn đúng hạn.
Nếu không muốn tự quản lý pool và cấu hình nginx cho từng website, hãy thử ZoPanel: gói Free gồm 3 tài khoản hosting, 10 website và 10 database, không giới hạn thời gian, và đã có sẵn nhiều phiên bản PHP. Xem bảng giá hoặc đọc thêm VPS 4 GB chạy được bao nhiêu website WordPress để thấy pool PHP biết ngủ giúp tiết kiệm RAM thế nào.
Câu hỏi thường gặp
Có chạy được PHP 7.4 và PHP 8.4 cùng lúc trên một server không?
Có. Với PHP-FPM, mỗi phiên bản là một dịch vụ riêng với socket riêng, và mỗi website được trỏ tới socket của phiên bản nó cần. Chỉ lưu ý rằng PHP 7.4 đã hết vá bảo mật từ năm 2022, nên chỉ nên giữ tạm thời cho ứng dụng chưa nâng cấp được.
Làm sao biết website đang chạy phiên bản PHP nào?
Xem cấu hình web server: socket trong fastcgi_pass (nginx) hoặc SetHandler (Apache) cho biết phiên bản. Trong ZoPanel, phiên bản hiển thị ở tab PHP & cấu hình của website. Đừng dựa vào php -v, vì lệnh này chỉ cho biết phiên bản dòng lệnh mặc định.
Đổi phiên bản PHP có làm website ngừng hoạt động không?
Việc đổi socket và nạp lại nginx chỉ mất vài giây và không làm rớt kết nối. Rủi ro thực sự là mã nguồn không tương thích với phiên bản mới, vì vậy hãy thử trên bản staging trước và chắc chắn đã cài đủ extension cho phiên bản mới.
Nhiều phiên bản PHP có làm server tốn RAM hơn không?
Có, nếu mọi pool đều chạy thường trực. Dùng pm = ondemand hoặc để panel tự dừng pool khi rảnh sẽ giảm đáng kể phần RAM này, vì chỉ những website đang có khách mới giữ tiến trình PHP.
Đọc tiếp

Cài Nginx, PHP, MariaDB trên Ubuntu 24.04 (LEMP) từng bước
Hướng dẫn cài nginx php mariadb trên Ubuntu 24.04 và Debian 12: tường lửa, PHP-FPM, server block, database, SSL Let's Encrypt và các lỗi bảo mật hay gặp.

Backup VPS lên S3: hướng dẫn sao lưu mã hoá, tự động, khôi phục được
Cách backup VPS lên S3 (AWS, Cloudflare R2, Backblaze B2, Wasabi) bằng restic - mã hoá, tăng dần, có lịch và thử khôi phục - hoặc chỉ vài cú bấm với ZoPanel.

VPS cho WordPress cấu hình bao nhiêu là đủ? Cách chọn CPU, RAM, ổ đĩa
VPS cho WordPress cấu hình bao nhiêu là đủ cho 1, 10 hay 100 website? Cách ước lượng CPU, RAM, ổ đĩa theo lưu lượng, kèm số liệu đo thực tế và lỗi cần tránh.