Cấu hình PHP-FPM Server riêng tích hợp với Apache (CentOS 7)

Ở 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.

cai dat php fpm rieng tich hop voi apache 1

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

cai dat php fpm rieng tich hop voi apache 2

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

cai dat php fpm rieng tich hop voi apache 3

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.

cai dat php fpm rieng tich hop voi apache 4

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.

cai dat php fpm rieng tich hop voi apache 5