Website được thiết kế tối ưu cho thành viên chính thức. Hãy Đăng nhập hoặc Đăng ký để truy cập đầy đủ nội dung và chức năng. Nội dung bạn cần không thấy trên website, có thể do bạn chưa đăng nhập. Nếu là thành viên của website, bạn cũng có thể yêu cầu trong nhóm Zalo "CNTT" các nội dung bạn quan tâm.

25. Tổng quan PHP-FPM trong hệ thống Web Server

ICT

1. Vì sao cần hiểu PHP-FPM trước khi cài đặt?

Rất nhiều sự cố Web Server có biểu hiện như:

  • Website chậm, timeout

  • Lỗi 502 Bad Gateway

  • PHP lỗi nhưng lại sửa Nginx

  • Restart “đại” cả server để xử lý sự cố

Nguyên nhân thường không nằm ở bản thân PHP, mà ở:

Không hiểu rõ PHP-FPM đang làm gì, chạy ở đâu và tương tác với Nginx như thế nào.

Trước khi cài PHP, cần xác định đúng:

  • PHP không phải là web server

  • PHP không chạy trực tiếp cho người dùng

  • PHP-FPM là dịch vụ backend, không expose ra Internet


2. PHP-FPM là gì?

PHP-FPM (FastCGI Process Manager) là:

  • Trình quản lý tiến trình PHP

  • Chạy PHP dưới dạng service

  • Nhận request từ web server (Nginx)

  • Trả kết quả xử lý về cho Nginx

Trong kiến trúc hiện đại:

Nginx xử lý web – PHP-FPM xử lý logic – mỗi bên làm đúng việc của mình.


3. Vị trí của PHP-FPM trong kiến trúc Web Server

Nhắc lại kiến trúc đã thống nhất:

Quan trọng:

  • PHP-FPM không nghe port public

  • Chỉ Nginx được phép giao tiếp với PHP-FPM

  • Người dùng không truy cập trực tiếp PHP-FPM


4. Nhiệm vụ chính của PHP-FPM

PHP-FPM chịu trách nhiệm:

  • Thực thi mã PHP

  • Quản lý pool tiến trình PHP

  • Kiểm soát tài nguyên CPU, RAM cho PHP

  • Tách biệt các website (khi cần)

PHP-FPM không:

  • Phục vụ file tĩnh

  • Xử lý SSL

  • Phân biệt domain


5. Vì sao không chạy PHP trực tiếp trong Nginx?

Một số người mới triển khai hay thắc mắc:

“Sao không cho Nginx chạy PHP luôn cho gọn?”

Lý do không nên:

  • Nginx không được thiết kế để chạy PHP

  • Khó kiểm soát tài nguyên

  • Dễ gây crash toàn web server

  • Khó debug khi có lỗi

PHP-FPM giúp:

  • Tách biệt lỗi PHP khỏi Nginx

  • Restart PHP mà không ảnh hưởng Nginx

  • Vận hành an toàn hơn rất nhiều


6. PHP-FPM giao tiếp với Nginx như thế nào?

Có hai cách giao tiếp phổ biến:

6.1. Unix Socket (khuyến nghị)

  • Giao tiếp nội bộ nhanh

  • Ít overhead

  • Bảo mật hơn

Ví dụ:

unix:/run/php/php8.2-fpm.sock

6.2. TCP Port

  • Dễ debug

  • Dùng khi PHP-FPM chạy trên server khác

Ví dụ:

127.0.0.1:9000 

Trong loạt bài này:

Ưu tiên dùng Unix socket cho server đơn lẻ.


7. PHP-FPM pool – khái niệm rất quan trọng

7.1. Pool là gì?

Pool là:

  • Một tập tiến trình PHP

  • Có cấu hình riêng

  • Có user/group riêng (khi cần)

Mặc định:

  • Có pool www


7.2. Vì sao pool quan trọng?

Pool quyết định:

  • Số request PHP xử lý đồng thời

  • Mức sử dụng RAM

  • Cách phân tách website

Trong hệ thống nhiều website:

Pool là công cụ quan trọng để cô lập sự cố.


8. Các chế độ quản lý process của PHP-FPM

PHP-FPM hỗ trợ nhiều mode, phổ biến nhất:

  • dynamic (mặc định)

  • ondemand

  • static

Trong production thông thường:

Dynamic là lựa chọn an toàn và cân bằng nhất.

Việc chọn mode sẽ được phân tích chi tiết ở bài cấu hình PHP-FPM.


9. Những lỗi phổ biến liên quan đến PHP-FPM

  • 502 Bad Gateway:

    • PHP-FPM không chạy

    • Socket sai

  • Website chậm:

    • Pool quá ít process

    • PHP bị nghẽn

  • Lỗi permission:

    • User/group không khớp

    • Socket không cho Nginx truy cập

Hầu hết các lỗi này:

Không giải quyết bằng cách restart Nginx.


10. Nguyên tắc triển khai PHP-FPM trong loạt bài này

Chúng ta sẽ tuân theo:

  1. Cài PHP-FPM tách biệt

  2. Dùng Unix socket

  3. Không expose PHP-FPM ra Internet

  4. Cấu hình rõ ràng, dễ đọc

  5. Có thể chạy nhiều version PHP khi cần


11. Chuẩn bị trước khi cài PHP-FPM

Sau bài này, bạn cần thống nhất:

  • Website nào cần PHP

  • Version PHP phù hợp

  • Số lượng website dùng PHP

  • Có cần tách pool hay không

Việc này giúp:

  • Không cài PHP dư thừa

  • Không cấu hình sai từ đầu


12. Bài tiếp theo

Trong Bài 26, chúng ta sẽ bắt đầu triển khai cụ thể:

Cài đặt PHP theo phiên bản khuyến nghị

Bài này sẽ hướng dẫn:

  • Chọn version PHP phù hợp

  • Cài PHP-FPM đúng cách

  • Tránh xung đột package