• Webmaster Tools
  • Diễn Đàn Hỏi Đáp
  • Profile
  • Ủng hộ
  • DNS Check
  • CheckIP
  • Liên Hệ
Đỗ Trung Quân
  • HƯỚNG DẪN
  • LINUX
    • Linux Tricks
    • Distro Linux
      • CentOS/RedHat
      • CloudLinux
      • Ubuntu/Debian
      • AlmaLinux
    • WebServer
      • NGINX
      • Apache
      • LiteSpeed
    • Virtualization
    • Monitoring Tool
      • Zabbix
    • DevOPS
      • Ansible
      • Docker
      • Jenkins
      • AWS
    • Mail Server
    • VPN
  • CONTROL PANEL
    • cPanel
    • DirectAdmin
    • aaPanel
    • FastPanel
    • CyberPanel
    • Easypanel
    • VestaCP
    • CloudPanel
    • HestiaCP
    • Plesk
    • Script VPS
  • DNS
    • Domain
  • CMS
    • WordPress
    • Laravel
  • SECURITY
    • SSL
    • Firewall
  • DỊCH VỤHOT
  • KHUYẾN MÃI
  • WEB MẪUHOT

Hướng dẫn cấu hình PHP-FPM Pools để bảo mật nhiều website

by ĐỖ TRUNG QUÂN 05/09/2021
Tác giả: ĐỖ TRUNG QUÂN Date: 05/09/2021Last Update 20/07/2022 0 comments 1,6K lượt xem
Dịch vụ xử lý mã độc WordPress
WEB MẪU WORDPRESS
Share FacebookTwitterPinterestTelegramEmail
1,6K

NỘI DUNG

  • I. Giới thiệu
  • II. Yêu cầu
  • III. Cấu hình
    • 1. Xoá trang website mặc định
    • 2. Tạo user cho trang web
    • 3. Chỉ định quyền cho thư mục web
    • 4. Tạo PHP-FPM Pools mới
    • 5. Cấu hình Pool
      • 5.1. Cấu hình Pool website1
      • 5.2. Cấu hình Pool website2
    • 6. Khởi động lại PHP-FPM
    • 7. Tạo file cấu hình website Nginx
      • 1. Tạo website1
  • 2. Tạo website2
  • 8. Tạo liên kết
  • 9. Kiểm tra file cấu hình

I. Giới thiệu

Khi phần cứng máy chủ trở nên nhanh hơn và hiệu quả hơn, việc lưu trữ nhiều trang web trên máy chủ web Nginx không còn là vấn đề nữa. Tuy nhiên để có hiệu suất tốt hơn, phân bổ quy trình và bảo mật, thì bạn hãy cân nhắc sử dụng các nhóm PHP FastCGI Process Manager (PHP-FPM) riêng biệt cho từng trang web của bạn.

Bài viết này mô tả những điều cơ bản của việc sử dụng nhóm PHP-FPM riêng biệt cho nhiều trang web trên Nginx với PHP 7.4 cấu hình trên Ubuntu 20.04.

Hướng dẫn cấu hình PHP-FPM Pools để bảo mật nhiều website
Mô hình của pools php-fpm

II. Yêu cầu

  • Sử dụng root hoặc sudo root
  • Máy chủ đã cài đặt lemp stack (Linux + Nginx+ MySQL/MariaDB + PHP)
  • Tạo 2 record A tương ứng cho 2 website và trỏ về IP máy chủ
    • wesbite1.dotrungquan.site
    • website2.dotrungquan.site

III. Cấu hình

1. Xoá trang website mặc định

Nginx cài đặt một trang web mặc định không cần thiết vì vậy bạn hãy xoá nó đi. Để xóa trang web mặc định bạn sử dụng lệnh sau.

rm -rf /etc/nginx/sites-enabled/default 

2. Tạo user cho trang web

Mỗi trang web cần chạy với tư cách người dùng khác nhau vì mục đích bảo mật và độc lập. Vì vậy bạn hãy tạo 2 tài khoản người dùng và chỉ định người dùng www-data cho các nhóm tương ứng.

Điều này cho phép máy chủ web tương tác với người dùng và ngược lại. Không cấp cho người dùng website1 và website2 đặc quyền đăng nhập hoặc liên kết bất kỳ thông tin nào khác với tài khoản. Để tạo người dùng, hãy chạy lệnh sau

useradd website1
useradd website2
usermod -a -G website1 www-data
usermod -a -G website2 www-data

3. Chỉ định quyền cho thư mục web

Tiếp theo bạn hãy tạo 2 thư mục cho 2 web riêng biệt và gán quyền như sau

mkdir /var/www/website1
chown -R website1:website1 /var/www/website1
mkdir /var/www/website2
chown -R website2:website2 /var/www/website2
chmod 770 /var/www/website1
chmod 770 /var/www/website2

Các quyền của Unix là 770. Mỗi người dùng và nhóm liên kết của người dùng có đầy đủ quyền (7) trên thư mục. Cài đặt này hạn chế người dùng website1 xem dữ liệu cho website2 và ngược lại.

4. Tạo PHP-FPM Pools mới

Bạn hãy copy pools php mặc định ra làm 2 bản, tương ứng của 2 web.

cp /etc/php/7.4/fpm/pool.d/www.conf /etc/php/7.4/fpm/pool.d/fpm-website1.conf
cp /etc/php/7.4/fpm/pool.d/www.conf /etc/php/7.4/fpm/pool.d/fpm-website2.conf

Xoá bỏ pool cũ không sử dụng đi

rm -rf /etc/php/7.4/fpm/pool.d/www.conf

5. Cấu hình Pool

Mỗi groups sẽ có user liên kết với Unix socket. Vì vậy bạn cần mở từng file và sửa lại tương ứng như sau.

5.1. Cấu hình Pool website1

vi /etc/php/7.4/fpm/pool.d/fpm-website1.conf

Thay đổi các dòng sau:

  • Thay đổi dòng trên cùng, bên trong dấu ngoặc từ [www] sang [website1]
  • Thay đổi dòng user = www-data thành user = website1
  • Thay đổi dòng group = www-data thành group = website1
  • Thay đổi dòng listen = /run/php/php7.4-fpm.sock thành listen = /run/php/php7.4-website1-fpm.sock
Hướng dẫn cấu hình PHP-FPM Pools để bảo mật nhiều website

Sau khi thay đổi hoàn tất, bạn save lại file cấu hình và thực hiện tiếp với Pool ở website2.

5.2. Cấu hình Pool website2

vi /etc/php/7.4/fpm/pool.d/fpm-website2.conf

Thay đổi các dòng sau:

  • Thay đổi dòng trên cùng, bên trong dấu ngoặc từ [www] sang [website2]
  • Thay đổi dòng user = www-data thành user = website2
  • Thay đổi dòng group = www-data thành group = website2
  • Thay đổi dòng listen = /run/php/php7.4-fpm.sock thành listen = /run/php/php7.4-website2-fpm.sock
Hướng dẫn cấu hình PHP-FPM Pools để bảo mật nhiều website

6. Khởi động lại PHP-FPM

Bạn hãy khởi động lại php-fpm để áp dụng thay đổi.

 service php7.4-fpm restart

Kiểm tra pool của PHP-FPM. Nếu cấu hình chính xác bạn sẽ thấy các nhóm như sau với các pool đã tạo.

root@sv:~# service php7.4-fpm status
● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2021-09-05 07:03:35 CEST; 10s ago
       Docs: man:php-fpm7.4(8)
    Process: 15541 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/7.4/fpm/pool.d/www.conf 74 (code=exited, status=0/SUCCESS)
   Main PID: 15526 (php-fpm7.4)
     Status: "Processes active: 0, idle: 4, Requests: 0, slow: 0, Traffic: 0req/sec"
      Tasks: 5 (limit: 1074)
     Memory: 7.8M
     CGroup: /system.slice/php7.4-fpm.service
             ├─15526 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
             ├─15537 php-fpm: pool website1
             ├─15538 php-fpm: pool website1
             ├─15539 php-fpm: pool website2
             └─15540 php-fpm: pool website2

Vì bạn đang kết nối qua sock, không còn kết nối qua TCP nữa. Vì vậy bạn không thể kiểm tra qua lệnh netstat mà hãy sử dụng ps aux để check tiến trình.

Ví dụ:

root@sv:~# ps aux | grep php
root       15526  0.0  1.9 198484 19452 ?        Ss   07:03   0:00 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
website1      15537  0.0  1.4 198876 14336 ?        S    07:03   0:00 php-fpm: pool website1
website1      15538  0.0  1.2 198876 12404 ?        S    07:03   0:00 php-fpm: pool website1
website2      15539  0.0  0.6 198876  6920 ?        S    07:03   0:00 php-fpm: pool website2
website2      15540  0.0  1.4 198876 14324 ?        S    07:03   0:00 php-fpm: pool website2
root       16993  0.0  0.0   8900   724 pts/1    S+   07:37   0:00 grep --color=auto php

7. Tạo file cấu hình website Nginx

Máy chủ cần hai trang web mới để sử dụng hai nhóm PHP-FPM, một trang được liên kết với mỗi nhóm tương ứng.

1. Tạo website1

Bạn hãy sử dụng lệnh sau để tạo file mới.

vi /etc/nginx/sites-available/website1

Lưu ý: Thay server_name website1.dotrungquan.site; bằng server_name của bạn

server {
    server_name website1.dotrungquan.site;

    access_log /var/log/nginx/website1.access.log;
    error_log /var/log/nginx/website1.error.log;

    root /var/www/website1;

    index index.php;

    try_files $uri $uri/ /index.php?$query_string;

    location ~ \.php$ {
            fastcgi_pass unix:/run/php/php7.4-website1-fpm.sock;
            include snippets/fastcgi-php.conf;
    }
}

Trong đó:

  • server_name – Tên domain/sub của site 1
  • access_log – đường dẫn của file access_log
  • error_log – đường dẫn của file error log
  • root – đường dẫn mã nguồn
  • fastcgi_pass – đường dẫn của file sock php-fpm

2. Tạo website2

vi /etc/nginx/sites-available/website2

Lưu ý: Thay server_name website2.dotrungquan.site; bằng server_name của bạn

server {
    server_name website2.dotrungquan.site;

    access_log /var/log/nginx/website2.access.log;
    error_log /var/log/nginx/website2.error.log;

    root /var/www/website2;

    index index.php;

    try_files $uri $uri/ /index.php?$query_string;

    location ~ \.php$ {
            fastcgi_pass unix:/run/php/php7.4-website2-fpm.sock;
            include snippets/fastcgi-php.conf;
    }
}

Trong đó:

  • server_name – Tên domain/sub của site 2
  • access_log – đường dẫn của file access_log
  • error_log – đường dẫn của file error log
  • root – đường dẫn mã nguồn
  • fastcgi_pass – đường dẫn của file sock php-fpm

8. Tạo liên kết

ln -s /etc/nginx/sites-available/website1 /etc/nginx/sites-enabled/website1
ln -s /etc/nginx/sites-available/website2 /etc/nginx/sites-enabled/website2

Khởi động lại nginx

service nginx restart

9. Kiểm tra file cấu hình

Bây giờ mình sẽ tạo mới một file php để kiểm tra như sau.

vi /var/www/website1/index.php

Sau đó bạn dán mã bên dưới vào và lưu lại file

<?php
        phpinfo();
?>

Bạn hãy truy cập vào trình duyệt để kiểm tra. Nếu xuất hiện ra thông tin có nghĩa bạn đã cấu hình và đã hoạt động.

Screenshot 2021 09 05 at 15.06.08

Việc tạo các nhóm PHP-FPM riêng biệt cho mỗi trang web được phục vụ trên một máy chủ duy nhất mang lại cho quản trị viên sự bảo mật mạnh mẽ hơn, ranh giới xác định hơn và giúp dễ dàng khắc phục sự cố liên quan đến các trang web riêng lẻ.

Cũng có thể điều chỉnh cài đặt trang web riêng lẻ cho hiệu suất. Các cài đặt này nằm trong tệp cấu hình /etc/php/7.4/fpm/pool.d. Cài đặt chính thường bị thay đổi là cài đặt chiều, kiểm soát quá trình tạo, với các cài đặt dynamic, static hoặc ondemand.

Chúc bạn thực hiện thành công.

5/5 - (1 bình chọn)
php-fpmPHP-FPM Pools

Tham gia nhóm hỗ trợ WordPress

Tham gia nhóm Hỗ trợ Server - Hosting & WordPress để cùng nhau hỏi đáp và hỗ trợ các vấn đề về WordPress, tối ưu máy chủ/server.

Tham gia ngay
ĐỖ TRUNG QUÂN

Mình tên là Đỗ Trung Quân, hiện đang công tác tại AZDIGI với vị trí là SysAdmin. Mình đam mê viết Blog. Vì viết Blog giúp mình trau dồi được nhiều kỹ năng. Học hỏi thêm nhiều kiến thức mới, từ đó mình có thể chia sẻ đến các bạn các bài viết tài liệu bổ ích hơn. Hiện tại mình là admin của Blog DOTRUNGQUAN.INFO - CaiSSL.COM - QuantriVPS.COM. Mới đây mình có tạo ra nhóm Hỗ trợ Server - Hosting & WordPress | Hỗ Trợ Xử Lý Mã Độc WordPress với mục đích gây dựng một cộng đồng nhỏ để mọi người trao đổi kinh nghiệm, kiến thức quản trị VPS. Các thủ thuật, mẹo vặt khi sử dụng VPS. Rất mong nhận được sự ủng hộ của các bạn.

BÀI VIẾT LIÊN QUAN

Hướng dẫn nâng cấp phiên bản PHP-FPM

29/12/2020
Author Box
Author Image

ĐỖ TRUNG QUÂN

Chuyên viên quản trị hệ thống.

Tư vấn & triển khai dịch vụ

VPS | Hosting | SSL | Mailserver | Website | Sửa lỗi WordPress

Bài viết của tác giả

Hosting/VPS khuyên dùng

Phổ Biến

  • Hướng dẫn tạo SSH Key trên MAC OS

  • Hướng dẫn sử dụng SSH Key

  • Hướng dẫn cài đặt v2board trên AAPANEL

  • Vấn đề IP Public liên tục bị thay đổi vì sao và cách khắc phục

  • Khắc phục lỗi không hiện hình ảnh và mô tả khi share link lên Facebook

  • Hướng dẫn kích hoạt Theme Flatsome mới nhất.

BẠN BÈ & ĐỐI TÁC

Thạch Phạm | CỔ Ý CONCEPT | Trương Quốc Cường | Đàm Trung Kiên | Web An Tâm | Phong Đinh | Học Mò | PHUNG.VN | Đăng Đạt

Bạn được quyền sao chép lại nội dung trên website Đỗ Trung Quân, miễn là có dẫn nguồn.

Hosting/VPS được tài trợ bởi AZDIGI - Nhà cung cấp Server Hosting tốt nhất hiện nay

AZDIGI - Nhà cung cấp Server Hosting tốt nhất hiện nay


Back To Top
Đỗ Trung Quân
  • HƯỚNG DẪN
  • LINUX
    • Linux Tricks
    • Distro Linux
      • CentOS/RedHat
      • CloudLinux
      • Ubuntu/Debian
      • AlmaLinux
    • WebServer
      • NGINX
      • Apache
      • LiteSpeed
    • Virtualization
    • Monitoring Tool
      • Zabbix
    • DevOPS
      • Ansible
      • Docker
      • Jenkins
      • AWS
    • Mail Server
    • VPN
  • CONTROL PANEL
    • cPanel
    • DirectAdmin
    • aaPanel
    • FastPanel
    • CyberPanel
    • Easypanel
    • VestaCP
    • CloudPanel
    • HestiaCP
    • Plesk
    • Script VPS
  • DNS
    • Domain
  • CMS
    • WordPress
    • Laravel
  • SECURITY
    • SSL
    • Firewall
  • DỊCH VỤHOT
  • KHUYẾN MÃI
  • WEB MẪUHOT