• Tools Online
    • Tạo CSR
    • SSL Checker
    • DNS Checker
    • View IP
    • Whois Domain
  • Diễn Đàn Hỏi Đáp
  • Profile
  • Ủng hộ
Đỗ Trung Quân
Banner
  • Home
  • Hướng dẫn chung
  • Linux
    • Linux Tricks
    • Distro Linux
      • CentOS/RedHat
      • CloudLinux
      • Ubuntu/Debian
      • AlmaLinux
      • Rocky Linux
    • WebServer
      • NGINX
      • Apache
      • LiteSpeed
      • Reverse Proxy
    • Virtualization
      • KVM
      • Proxmox
      • OpenVZ
    • Monitoring Tool
      • Prometheus
      • Zabbix
    • DevOPS
      • Ansible
      • Docker
      • Kubernetes
      • Jenkins
      • Cloud
        • GCP
        • AWS
        • Azure
    • Mail Server
    • Database
    • VPN
  • ControlPanel
    • cPanel
    • DirectAdmin
    • aaPanel
    • CyberPanel
    • VestaCP
    • FastPanel
    • CloudPanel
    • HestiaCP
    • Script VPS
  • DNS
    • Domain
  • CMS
    • WordPress
    • Laravel
  • Security
    • SSL
    • Firewall
  • Dịch Vụ
    • Thiết kế web
    • Dịch vụ cài đặt tối ưu VPS/Server
    • Cài đặt WordPress & Tối ưu WordPress
    • Dịch vụ xử lý mã độc trên WordPress
    • Xác minh cài đặt SSL
    • Dich vụ Backlink
  • Liên Hệ

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

by ĐỖ TRUNG QUÂN 5 Tháng Chín, 2021
written by ĐỖ TRUNG QUÂN Published: 5 Tháng Chín, 2021Last Updated on 20 Tháng Bảy, 2022 0 comment 740 views

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)

Hãy tham gia Nhóm Hỗ Trợ VPS Hosting để cùng học hỏi và trao đổi kiến thức nhé. Chúc bạn thành công.

php-fpmPHP-FPM Pools
Share 0 FacebookTwitterPinterestTelegramEmail
ĐỖ 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 - linuxcanban.com - it.info.vn. Mới đây mình có tạo ra một Nhóm Hỗ Trợ VPS Hosting 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ạn sẽ thích bài viết này

Hướng dẫn cài đặt thiết lập CentOS 7

18 Tháng Ba, 2023

Hướng dẫn cài đặt Ubuntu Server 20.04 LTS

17 Tháng Ba, 2023

Hướng dẫn nâng cấp Ubuntu 22.04 LTS lên...

22 Tháng Mười, 2022

Hướng dẫn cài LEMP Stack trên Ubuntu 22.04

18 Tháng Năm, 2022

Hướng dẫn cài đặt WordPress trên CentminMod

9 Tháng Năm, 2022

Hướng dẫn cài đặt CentminMod trên CentOS 7

9 Tháng Năm, 2022

Hướng dẫn cấu hình HTTP/2 trên máy chủ...

20 Tháng Chín, 2021

Cài đặt Google PageSpeed module NGINX trên Ubuntu...

18 Tháng Chín, 2021

Hướng dẫn cài đặt Nginx Module Brotli trên...

10 Tháng Chín, 2021

Hướng dẫn cài đặt Elasticsearch trên Ubuntu 20.04

8 Tháng Chín, 2021
Theo dõi
Đăng nhập
Thông báo của
guest

guest

0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Nhóm Hỗ Trợ Hosting VPS

Nhóm Hỗ Trợ VPS Hosting

Tin Khuyến Mãi

Thông tin về tôi

Thông tin về tôi

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.

Facebook Instagram Youtube Telegram

BÀI VIẾT PHỔ BIẾN

  • 1

    Hướng dẫn chuyển website WordPress bằng All in one Migration

  • 2

    Sử dụng Plugin Query Monitor để gỡ lỗi và tăng hiệu suất

  • 3

    Khắc phục thông báo “utf8mb4 yêu cầu thư viện mới hơn” trên WordPress

  • 4

    Sửa lỗi WordPress “Post-processing of the image failed likely because the server is busy”

Phản hồi gần đây

  • Minh trong Thiết lập nhiều website sử dụng chung một tài khoản MySQL
  • Lê Văn trong Hướng dẫn trỏ tên miền về Blogspot (blogger)
  • Quân trong Hướng dẫn cài đặt và cấu hình plugin W3 Total Cache cho website WordPress
  • Học Luật trong Sử dụng RSYNC để Clone một VPS hoàn chỉnh

Top Commentators

  • Anh Quân Anh Quân (133)
  • nghĩa nghĩa (8)
  • Bùi Đức Hiệp Bùi Đức Hiệp (7)
  • David Do David Do (7)
  • Bamboo Bamboo (5)
  • Bình Minh Bình Minh (5)
  • Cai Việt Hoàng Cai Việt Hoàng (5)
  • Duc Thuan Duc Thuan (5)

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

Thạch Phạm | aaPanel | Linux Căn Bản | Bảo Trần | Trương Quốc Cường | Đàm Trung Kiên | CaiSSL.com

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
  • Home
  • Hướng dẫn chung
  • Linux
    • Linux Tricks
    • Distro Linux
      • CentOS/RedHat
      • CloudLinux
      • Ubuntu/Debian
      • AlmaLinux
      • Rocky Linux
    • WebServer
      • NGINX
      • Apache
      • LiteSpeed
      • Reverse Proxy
    • Virtualization
      • KVM
      • Proxmox
      • OpenVZ
    • Monitoring Tool
      • Prometheus
      • Zabbix
    • DevOPS
      • Ansible
      • Docker
      • Kubernetes
      • Jenkins
      • Cloud
        • GCP
        • AWS
        • Azure
    • Mail Server
    • Database
    • VPN
  • ControlPanel
    • cPanel
    • DirectAdmin
    • aaPanel
    • CyberPanel
    • VestaCP
    • FastPanel
    • CloudPanel
    • HestiaCP
    • Script VPS
  • DNS
    • Domain
  • CMS
    • WordPress
    • Laravel
  • Security
    • SSL
    • Firewall
  • Dịch Vụ
    • Thiết kế web
    • Dịch vụ cài đặt tối ưu VPS/Server
    • Cài đặt WordPress & Tối ưu WordPress
    • Dịch vụ xử lý mã độc trên WordPress
    • Xác minh cài đặt SSL
    • Dich vụ Backlink
  • Liên Hệ
wpDiscuz