Mục lục
Ở trong các bài viết trước, Zhost đã hướng dẫn các bạn cài đặt PHP-FPM trên Web server Apache để xử lý các tệp tin PHP.
Tuy nhiên, trong thực tế đối với các website có lượng truy cập lớn ta sẽ phải tách riêng thành phần xử lý ra nhằm phục vụ việc cân bằng tải hoặc điều hướng.
Trong bài viết này, Zhost sẽ hướng dẫn các bạn cài đặt PHP-FPM tách ra một server riêng và tích hợp với Apache Web Server để chạy các website PHP.
Mô hình Lab
Trong bài này, Zhost sẽ sử dụng mô hình lab 02 Server CentOS 7 bao gồm:
- Apache Web Server: 10.10.10.11 – Lưu trữ code và các file tài nguyên tĩnh.
- PHP-FPM Server: 10.10.10.12 – Xử lý các file kịch bản PHP được Web Server yêu cầu và gửi lại kết quả.
- NFS Server: 10.10.10.13 – Tạo Share Storage cho Apache và PHP-FPM.
Các bước thực hiện
Hãy chắc chắn rằng server CentOS 7 của bạn đang được cập nhật mới nhất, hoặc gõ lệnh sau để cập nhật và cài phần mềm cần thiết:
yum update -y && yum install nano yum-utils -y
Vô hiệu hoá SELinux theo bài viết: Cách vô hiệu hóa SELinux trên CentOS
Cài đặt NFS Server
Thực hiện trên NFS Server 10.10.10.13
Các bước thực hiện cài đặt NFS Server bạn tham khảo tại bài viết: Cài đặt NFS Server – Client trên Server Linux
Ta tạo mount thư mục /var/nfs trên NFS server lên thư mục /var/www/html trên Web server và PHP-FPM Server.
Lưu ý: Đường dẫn trên Web Server và PHP-FPM phải giống nhau.
Cài đặt Apache Web Server
Thực hiện trên Apache Web Server 10.10.10.11
Cài đặt Apache
Các bước cài đặt Apache web server bạn có thể tham khảo tại bài viết: Cài đặt LAMP trên CentOS 7
Kiểm tra hoạt động của dịch vụ Apache Web server:
systemctl status httpd.service
Cấu hình Apache MPM
Để Apache web server phục vụ PHP với FastCGI và PHP-FPM cho hiệu suất cao nhất cần kết hợp Apache sử dụng Event MPM. Bạn tham khảo bài viết: Cấu hình Apache MPM (CentOS 7)
Kiểm tra phiên bản Apache và MPM đang hoạt động:
apachectl -V |grep -i 'version|MPM' Server version: Apache/2.4.6 (CentOS) Server MPM: event
Mount NFS
Cài đặt gói NFS Client:
yum install nfs-utils -y
Ta thực hiện chạy lệnh sau để mount thư mục /var/nfs trên NFS server lên thư mục /var/www/html
mount -t nfs 10.10.10.13:/var/nfs /var/www/html
Hoặc cấu hình fstab để tự động mount khi server khởi động. (tham khảo: Cài đặt NFS Server – Client trên Server Linux )
Cấu hình SELinux cho phép Apache sử dụng NFS:
setsebool -P httpd_use_nfs 1
Cài đặt PHP-FPM Server
Thực hiện trên PHP-FPM Application Server 10.10.10.12
Cài đặt và kích hoạt EPEL và Remi repository trên hệ thống CentOS 7:
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
Sử dụng một trong những lệnh bên dưới để cài đặt PHP 7.0, PHP 7.1, PHP 7.2 hoặc PHP 7.3.
Ở đây tôi sử dụng PHP 7.3:
#Trước tiên hãy tắt remi-php54 sudo yum-config-manager --disable remi-php54 ## Install PHP 7.3 sudo yum-config-manager --enable remi-php73 ## Install PHP 7.2 sudo yum-config-manager --enable remi-php72 ## Install PHP 7.1 sudo yum-config-manager --enable remi-php71
Cài đặt module php và php-fpm:
yum -y install php php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json php-pdo php-pecl-apcu php-pecl-apcu-devel
Kiểm tra phiên bản PHP đã cài đặt:
php -v
Như vậy ta đã cài đặt PHP-FPM thành công. Để Web server có thể kết nối đến và yêu cầu xử lý các file code PHP, ta cấu hình như sau:
Mở file /etc/php-fpm.d/www.conf bằng trình Text editor.
nano /etc/php-fpm.d/www.conf
Thực hiện điều chỉnh như sau:
Tìm đến dòng listen = 127.0.0.1:9000
đổi thành listen = 10.10.10.12:9000
trong đó 10.10.10.12 là ip trên server ta muốn PHP-FPM lắng nghe.
Tìm đến dòng listen.allowed_clients = 127.0.0.1
và thêm IP của Web server vào để cho phép kết nối. Sau khi điều chỉnh sẽ như sau:
listen.allowed_clients = 127.0.0.1,10.10.10.11
Trong đó 10.10.10.11 là IP của web server cho phép kết nối đến PHP-FPM.
Nếu muốn cho phép tất cả các web server bên ngoài kết nối đến, bạn có thể comment dòng listen.allowed_clients = 127.0.0.1
Start & enable PHP-FPM:
systemctl start php-fpm systemctl enable php-fpm
Cho phép port PHP-FPM trên Firewalld:
firewall-cmd --zone=public --permanent --add-port=9000/tcp firewall-cmd --reload
Kiểm tra xem PHP-FPM đã lắng nghe kết nối hay chưa bằng lệnh: netstat -plnt
(để chạy được lệnh này, bạn cần cài đặt net-tools trước: yum -y install net-tools
)
PHP-FPM đã lắng nghe trên IP: 10.10.10.12 và port 9000 như ta vừa cấu hình.
Mount NFS
Cài đặt gói NFS Client:
yum install nfs-utils -y
Ta thực hiện chạy lệnh sau để mount thư mục /var/nfs trên NFS server lên thư mục /var/www/html
mount -t nfs 10.10.10.13:/var/nfs /var/www/html
Hoặc cấu hình fstab để tự động mount khi server khởi động. (tham khảo: Cài đặt NFS Server – Client trên Server Linux )
Cấu hình SELinux cho phép PHP-FPM sử dụng NFS:
setsebool -P httpd_use_nfs 1
Cấu hình Apache Web Server kết nối đến PHP-FPM Application Server
Thực hiện trên Apache Web Server 10.10.10.11
Chạy lệnh sau Cấu hình Apache để hỗ trợ PHP FastCGI và kết nối đến PHP-FPM Server:
cat >>/etc/httpd/conf.d/php.conf <<EOF <FilesMatch .php$> SetHandler "proxy:fcgi://10.10.10.12:9000" </FilesMatch> EOF
Khởi động lại Apache Service:
systemctl restart httpd
Kiểm tra hoạt động
Thư mục gốc web mặc định của Apache là /var/www/html. Ta tạo một tệp PHP (info.php) trong thư mục này để kiểm tra Apache xử lý PHP.
File info.php sẽ hiển thị thông tin chi tiết phiên bản PHP mà chúng ta cài đặt.
nano /var/www/html/info.php
Dán nội dung sau vào file:
<?php phpinfo(); ?>
Lưu lại.
Bây giờ các bạn mở trình duyệt lên và gõ địa chỉ: http://your-ip-address/info.php, nếu kết quả hiện thị như hình dưới là việc cài đặt của chúng ta đã thành công.