Skip to content
Dán nhãn

PHP FPM là gì? Đặc điểm và cách thức hoạt động PHP FPM

Featured image of post PHP FPM là gì? Đặc điểm và cách thức hoạt động PHP FPM

PHP-FPM (FastCGI Process Manager) là trình quản lý tiến trình PHP hiệu suất cao. Tìm hiểu cách hoạt động, ưu nhược điểm và cấu hình với Nginx.

PHP-FPM (FastCGI Process Manager) là trình quản lý tiến trình PHP hiệu suất cao, được sử dụng rộng rãi trong các web server hiện đại. Bài viết giúp bạn hiểu rõ PHP-FPM là gì, cách hoạt động, ưu nhược điểm và hướng dẫn cấu hình với Nginx.

PHP FPM là gì?

PHP-FPM (FastCGI Process Manager) là trình quản lý tiến trình dành riêng cho PHP, đóng vai trò trung gian giữa web server và các script PHP. Thay vì khởi tạo tiến trình PHP mới cho mỗi request (như CGI truyền thống), PHP-FPM duy trì một pool các worker process sẵn sàng xử lý yêu cầu.

PHP-FPM được tích hợp chính thức vào PHP từ phiên bản 5.3.3 (2010) và trở thành lựa chọn mặc định cho hầu hết web server hiện đại, đặc biệt khi kết hợp với Nginx.

Cách hoạt động của PHP FPM

Quy trình xử lý request qua PHP-FPM:

  1. Người dùng gửi request HTTP đến web server (Nginx/Apache).
  2. Web server nhận request, nếu là file PHP thì chuyển đến PHP-FPM qua Unix socket hoặc TCP.
  3. PHP-FPM master process nhận request và phân phối đến worker process trong pool.
  4. Worker process thực thi mã PHP, truy vấn database nếu cần.
  5. Kết quả HTML được trả ngược về web server → trình duyệt người dùng.

PHP-FPM hỗ trợ 3 chế độ quản lý process:

Chế độ Mô tả Phù hợp
static Số worker cố định Server chuyên dụng, traffic ổn định
dynamic Worker tăng/giảm theo nhu cầu Đa số trường hợp (mặc định)
ondemand Worker chỉ tạo khi có request VPS nhỏ, ít traffic

So sánh PHP Handler

Tiêu chí PHP-CGI PHP-FPM DSO (mod_php)
Quản lý tiến trình Tạo mới mỗi request Pool worker tái sử dụng Nhúng vào Apache
Hiệu suất Thấp Cao Trung bình
Xử lý đồng thời Kém Tốt Trung bình
Tài nguyên Lãng phí Tối ưu Trung bình
Web server Mọi server Nginx, Apache, LiteSpeed Chỉ Apache
Cấu hình Đơn giản Trung bình Đơn giản
Bảo mật Cơ bản Tốt (pool riêng/user) Thấp (chung user)

PHP-CGI: Tạo tiến trình mới cho mỗi request → chậm, tốn tài nguyên. Chỉ phù hợp cho môi trường đơn giản.

DSO (mod_php): Nhúng PHP trực tiếp vào Apache, dễ cài đặt nhưng tất cả script chạy cùng user Apache → rủi ro bảo mật trên shared hosting.

PHP-FPM: Duy trì pool worker, tái sử dụng tiến trình, hỗ trợ pool riêng theo user → cân bằng giữa hiệu suất và bảo mật.

Laravel là gì? Framework PHP phổ biến nhất

Ưu nhược điểm PHP-FPM

Ưu điểm:

  • Hiệu suất cao: Pool worker tái sử dụng, giảm overhead khởi tạo tiến trình.
  • Xử lý đồng thời tốt: Hàng nghìn request đồng thời với cấu hình pool phù hợp.
  • Quản lý linh hoạt: 3 chế độ process (static/dynamic/ondemand), slow-log, status page.
  • Bảo mật: Pool riêng cho từng user/website, giới hạn tài nguyên per-pool.
  • Tương thích rộng: Nginx, Apache, LiteSpeed, Caddy và mọi server hỗ trợ FastCGI.
  • Graceful restart: Reload cấu hình không gián đoạn service.

Nhược điểm:

  • Cấu hình phức tạp hơn: Cần hiểu pool, worker, socket để tối ưu.
  • Tốn RAM: Mỗi worker chiếm 20-50MB RAM, cần tính toán kỹ cho VPS nhỏ.
  • Không nhúng vào Apache: Cần cấu hình proxy riêng (mod_proxy_fcgi).
Tính toán số worker phù hợp
Công thức: `max_children = (RAM khả dụng) / (RAM mỗi worker)`. Ví dụ: VPS 2GB RAM, mỗi worker ~40MB → max_children = 1500MB / 40MB ≈ 35-40 worker. Dùng `pm.status_path` để theo dõi số worker active.

Cấu hình PHP-FPM với cPanel

cPanel tích hợp sẵn PHP-FPM qua EasyApache, giúp cấu hình dễ dàng:

  1. Đăng nhập WHM → EasyApache 4 → Customize.
  2. Trong tab PHP Extensions, chọn phiên bản PHP cần dùng.
  3. Vào MultiPHP Manager → chọn PHP-FPM làm PHP Handler.
  4. Cấu hình pool riêng cho từng domain tại MultiPHP INI Editor.

cPanel tự động tạo pool riêng cho mỗi cPanel user, đảm bảo cách ly tài nguyên và bảo mật giữa các website trên shared hosting.

Cấu hình PHP-FPM với Nginx

Cài đặt PHP-FPM:

# Ubuntu/Debian
sudo apt update
sudo apt install php8.2-fpm

# CentOS/RHEL
sudo dnf install php-fpm

Cấu hình Nginx:

server {
    listen 80;
    server_name example.com;
    root /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Kiểm tra và khởi động:

# Kiểm tra cấu hình Nginx
sudo nginx -t

# Khởi động lại
sudo systemctl restart nginx
sudo systemctl restart php8.2-fpm

# Kiểm tra trạng thái
sudo systemctl status php8.2-fpm
Bảo mật PHP-FPM
Luôn sử dụng Unix socket thay vì TCP port để kết nối Nginx với PHP-FPM (bảo mật và nhanh hơn). Cấu hình `open_basedir` để giới hạn PHP chỉ truy cập thư mục website. Bật HTTPS với SSL/TLS để mã hóa dữ liệu truyền tải.

Nginx là gì? Tìm hiểu web server phổ biến nhất thế giới

Kết luận: PHP-FPM là trình quản lý tiến trình PHP hiệu suất cao, vượt trội so với PHP-CGI và mod_php. Với khả năng quản lý pool worker linh hoạt, PHP-FPM là lựa chọn hàng đầu cho các ứng dụng web PHP hiện đại, đặc biệt khi kết hợp với Nginx.

Nguồn & Tài liệu tham khảo
1. [PHP — FPM Documentation](https://www.php.net/manual/en/install.fpm.php) 2. [Nginx — PHP-FPM Configuration](https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/) 3. [cPanel — PHP-FPM with EasyApache](https://docs.cpanel.net/ea4/php/php-fpm/) 4. [Wikipedia — FastCGI](https://en.wikipedia.org/wiki/FastCGI)

Câu hỏi thường gặp

PHP FPM là gì?
PHP-FPM (FastCGI Process Manager) là trình quản lý tiến trình PHP, duy trì pool worker sẵn sàng xử lý request thay vì khởi tạo tiến trình mới cho mỗi yêu cầu, giúp tăng hiệu suất đáng kể.
PHP FPM khác PHP-CGI như thế nào?
PHP-CGI tạo tiến trình mới cho mỗi request rồi hủy sau khi xong. PHP-FPM duy trì pool tiến trình sẵn sàng và tái sử dụng, giảm overhead khởi tạo và tăng khả năng xử lý đồng thời.
WordPress có cần PHP FPM không?
WordPress hoạt động được mà không cần PHP-FPM, nhưng PHP-FPM giúp cải thiện rõ rệt hiệu suất và tốc độ tải trang, đặc biệt với site có nhiều plugin hoặc lưu lượng cao.
PHP FPM dùng với web server nào?
PHP-FPM hoạt động tốt nhất với Nginx (qua FastCGI), nhưng cũng tương thích Apache (qua mod_proxy_fcgi), LiteSpeed, Caddy và hầu hết web server hỗ trợ FastCGI.
Làm cách nào khởi động PHP FPM?
Trên Ubuntu/Debian: sudo systemctl start php8.2-fpm. Trên CentOS/RHEL: sudo systemctl start php-fpm. Thay đổi phiên bản PHP tương ứng.

article.share