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 Vietnix nhé.
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.
- 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
.
Nếu bạn đang tìm kiếm một nhà cung cấp VPS để chạy nhiều ứng dụng web, có thể tham khảo Vietnix. Vietnix hiện đang cung cấp các gói VPS có độ tin cậy cao, đa dạng hệ điều hành, khả năng mở rộng linh hoạt,…. phù hợp với nhu cầu của người dùng gồm: VPS Giá Rẻ, Cloud Server, VPS Cao Cấp, VPS GPU và VPS NVMe.
Đặc biệt, hạ tầng máy chủ ở Vietnix được bảo vệ bởi hệ thống chống tấn công DDoS chuyên nghiệp do chính Vietnix độc quyền phát triển, giúp nâng cao tính ổn định và bảo mật. Liên hệ ngay với Vietnix để được tư vấn chi tiết.
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.
Xem thêm: Cách để Disable SELinux trên CentOS 7
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.
Với 11 năm kinh nghiệm, VPS Vietnix được đông đảo người dùng lựa chọn bởi độ ổn định cao, tốc độ load web nhanh chóng, có hạ tầng Anti DDoS chuyên biệt và đội ngũ support kỹ thuật luôn túc trực sẵn sàng hỗ trợ 24/7.
Vietnix luôn chú trọng đầu tư vào hạ tầng và nhân sự chất lượng nhằm mang đến cho khách hàng một dịch vụ ổn định nhất. Tính đến thời điểm hiện tại Vietnix tự hào vì đã đạt được những con số ấn tượng như sau:
- 50.000 khách hàng.
- 97% khách hàng đánh giá 5* và giới thiệu dịch vụ sau khi sử dụng.
- 89% khách hàng duy trì dịch vụ đến thời điểm hiện tại.
- 100.000 dịch vụ được kích hoạt.
Nhanh tay đăng ký VPS tốc độ cao Vietnix để trải nghiệm dịch vụ ổn định, tốc độ cao, hỗ trợ nhanh chóng với nhiều ưu đãi hấp dẫn.
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
- Hotline: 1800 1093.
- Email: sales@vietnix.com.vn
Lời kết
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é.