PHP-FPM là gì? Cách kiểm tra và chỉnh cấu hình trên VPS
PHP-FPM giúp xử lý các yêu cầu PHP cho website trên VPS. Bài viết giải thích cách hoạt động, hướng dẫn kiểm tra pool, socket và điều chỉnh những thiết lập cơ bản an toàn.
IPv4 và IPv6 khác nhau về cấu trúc địa chỉ, cách định tuyến và khả năng mở rộng. Bài viết giúp bạn hiểu website cần hỗ trợ giao thức nào và cách triển khai phù hợp.
#IPv4
#IPv6
#website
VVibeVPSĐọc bài
Sẵn sàng triển khai?
Đưa website của bạn lên Cloud VPS ngay hôm nay
Khởi tạo tự động ngay sau khi thanh toán, chuyển khoản bằng mã QR, bật tắt và cài lại máy chủ trong trang quản lý.
Khi website PHP chạy trên VPS, tốc độ phản hồi không chỉ phụ thuộc vào mã nguồn hay tài nguyên máy chủ. Cách PHP xử lý các yêu cầu cũng ảnh hưởng đến khả năng đáp ứng khi có nhiều người truy cập. PHP-FPM là một thành phần thường được dùng để quản lý việc này, nhưng các thông số của nó đôi khi khó hiểu nếu bạn mới quản trị máy chủ.
Bài viết dưới đây giúp bạn hiểu PHP-FPM là gì, cách kiểm tra trạng thái và những thiết lập cơ bản cần biết. Các ví dụ lệnh phù hợp với máy chủ Linux; tên dịch vụ và đường dẫn có thể khác tùy hệ điều hành, phiên bản PHP hoặc cách cài đặt.
PHP-FPM là gì và hoạt động như thế nào?
Sơ đồ luồng xử lý yêu cầu website qua máy chủ web và PHP-FPM
PHP-FPM là viết tắt của PHP FastCGI Process Manager, một trình quản lý tiến trình PHP theo giao thức FastCGI. Thay vì khởi tạo một tiến trình PHP mới cho từng yêu cầu, PHP-FPM duy trì và quản lý các tiến trình xử lý để máy chủ web có thể chuyển yêu cầu PHP đến xử lý.
Luồng hoạt động phổ biến trên VPS gồm ba thành phần:
Trình duyệt gửi yêu cầu đến website.
Máy chủ web như Nginx hoặc Apache tiếp nhận yêu cầu. Với nội dung PHP, máy chủ web chuyển yêu cầu đến PHP-FPM qua socket hoặc TCP.
PHP-FPM chạy mã PHP, trả kết quả cho máy chủ web, sau đó nội dung được gửi về trình duyệt.
PHP-FPM không thay thế máy chủ web và cũng không tự làm cho mã nguồn chạy nhanh hơn. Vai trò chính của nó là quản lý các tiến trình PHP, giới hạn hoặc phân bổ số tiến trình theo cấu hình và cung cấp cách để máy chủ web giao tiếp với PHP. Vì vậy, cấu hình phù hợp có thể giúp sử dụng tài nguyên hợp lý; cấu hình không phù hợp có thể khiến website thiếu tiến trình xử lý hoặc tiêu tốn quá nhiều RAM.
Khi sử dụng PHP-FPM trên VPS, mỗi nhóm cấu hình thường được gọi là một pool. Pool có thể gắn với một phiên bản PHP, người dùng hệ thống hoặc website cụ thể. Việc tách pool giúp quản lý tiến trình và quyền truy cập rõ ràng hơn, đặc biệt khi VPS chạy nhiều website.
Cách kiểm tra PHP-FPM trên VPS
Quản trị viên kiểm tra dịch vụ PHP-FPM trên VPS
Trước khi chỉnh sửa, hãy xác định PHP-FPM có được cài đặt và đang hoạt động hay không. Bạn cần truy cập VPS bằng SSH với tài khoản có quyền phù hợp. Tên lệnh phụ thuộc vào phiên bản PHP, do đó php-fpm có thể cần thay bằng tên như php-fpm8.2.
Kiểm tra phiên bản và dịch vụ
Xem phiên bản PHP CLI đang có:
php -v
Lệnh này kiểm tra PHP chạy trên dòng lệnh, nhưng chưa chắc cho biết phiên bản PHP-FPM mà website đang sử dụng. Liệt kê các dịch vụ liên quan bằng systemd:
Sau khi xác định tên dịch vụ, xem trạng thái, chẳng hạn:
sudo systemctl status php8.2-fpm
Nếu dịch vụ có tên khác, hãy thay php8.2-fpm bằng tên tương ứng. Trạng thái active (running) cho biết dịch vụ đang chạy, nhưng chưa xác nhận website đã kết nối đúng tới pool. Có thể xem nhật ký gần đây để tìm lỗi khởi động hoặc lỗi cấu hình:
sudo journalctl -u php8.2-fpm -n 50 --no-pager
Tìm tệp cấu hình và kiểm tra cú pháp
Cấu hình thường nằm trong thư mục /etc/php/ hoặc /etc/php-fpm.d/, nhưng vị trí cụ thể tùy bản phân phối và cách cài PHP. Có thể tìm các tệp cấu hình pool bằng lệnh:
Một số hệ thống hỗ trợ kiểm tra cấu hình trước khi áp dụng:
sudo php-fpm8.2 -tt
Nếu không nhận diện được lệnh, kiểm tra tên binary có sẵn hoặc tài liệu của gói PHP đang cài. Cờ -tt thường dùng để kiểm tra và hiển thị cấu hình; không nên giả định mọi phiên bản đều dùng chính xác cùng lệnh.
Kiểm tra socket hoặc cổng kết nối
Trong tệp pool, tìm dòng listen. Giá trị có thể là đường dẫn socket, chẳng hạn /run/php/php8.2-fpm.sock, hoặc địa chỉ TCP như 127.0.0.1:9000. Cấu hình chuyển tiếp PHP trong Nginx hoặc Apache phải trỏ đến đúng địa chỉ này.
Với socket, kiểm tra tệp có tồn tại và quyền truy cập:
ls -l /run/php/
Tên thư mục và socket thực tế có thể khác. Nếu PHP-FPM và máy chủ web không dùng chung quyền truy cập phù hợp, website có thể báo lỗi kết nối hoặc lỗi gateway. Không nên tùy tiện đặt quyền mở rộng cho mọi người dùng; hãy kiểm tra user, group và cấu hình listen.owner, listen.group hoặc listen.mode của pool.
Các thiết lập cấu hình PHP-FPM cơ bản
Minh họa các pool, tiến trình và kết nối socket trong cấu hình PHP-FPM
Khi chỉnh cấu hình PHP-FPM, hãy sao lưu tệp trước và chỉ thay đổi từng nhóm thông số. Những thiết lập quan trọng thường nằm trong tệp pool, ví dụ www.conf.
Chọn chế độ quản lý tiến trình
Tham số pm xác định cách pool tạo và quản lý tiến trình con:
static: duy trì số tiến trình cố định, xác định bằng pm.max_children.
dynamic: điều chỉnh số tiến trình trong giới hạn cấu hình, phù hợp khi muốn có sẵn một lượng tiến trình và thay đổi theo tải.
ondemand: tạo tiến trình khi có yêu cầu, sau đó có thể dừng tiến trình nhàn rỗi theo thời gian chờ.
Không có chế độ tốt nhất cho mọi website. static dễ dự đoán nhưng có thể giữ nhiều RAM khi ít truy cập. ondemand giảm số tiến trình lúc nhàn rỗi nhưng có thể phát sinh độ trễ khi cần tạo tiến trình. dynamic cần được cân đối bằng các tham số khởi tạo và giới hạn.
Hiểu giới hạn số tiến trình
pm.max_children là số tiến trình PHP-FPM tối đa của pool. Đây là thông số cần điều chỉnh cẩn thận: đặt quá thấp có thể làm yêu cầu phải chờ khi website bận; đặt quá cao có thể khiến tổng mức dùng RAM vượt quá khả năng VPS.
Để ước lượng, hãy quan sát mức RAM của tiến trình PHP khi website hoạt động bình thường và lúc có tải. Có thể xem tiến trình bằng:
ps -ylC php-fpm8.2 --sort:rss
Tên tiến trình có thể khác theo phiên bản. Một phép ước lượng thận trọng là dành một phần RAM khả dụng cho PHP-FPM sau khi chừa tài nguyên cho hệ điều hành, cơ sở dữ liệu, máy chủ web và các dịch vụ khác, rồi chia phần đó cho mức RAM trung bình của một tiến trình PHP. Đây chỉ là điểm bắt đầu: mức dùng bộ nhớ thay đổi theo mã nguồn, plugin, tác vụ và dữ liệu được xử lý.
Với chế độ dynamic, các tham số thường gặp gồm pm.start_servers, pm.min_spare_servers và pm.max_spare_servers. Chúng điều khiển số tiến trình khởi động và số tiến trình nhàn rỗi cần duy trì. Đặt các giá trị này hợp lý giúp tránh tạo quá ít hoặc giữ quá nhiều tiến trình, nhưng nên căn cứ vào biểu đồ RAM và mô hình truy cập thay vì sao chép cấu hình của máy chủ khác.
Một số thiết lập khác cần lưu ý
pm.max_requests đặt số yêu cầu một tiến trình xử lý trước khi được tạo lại. Thiết lập này có thể hữu ích trong một số trường hợp tiến trình tăng dần mức dùng bộ nhớ, nhưng không thay thế việc tìm và sửa nguyên nhân trong ứng dụng.
request_terminate_timeout giới hạn thời gian xử lý một yêu cầu. Nếu đặt quá thấp, tác vụ hợp lệ nhưng lâu như xử lý tệp hoặc báo cáo có thể bị ngắt. Nếu cần tăng, hãy đồng thời xem lại thời gian chờ ở máy chủ web và giới hạn thực thi PHP để các thành phần không mâu thuẫn.
Các giá trị PHP như memory_limit thường được đặt trong php.ini; một số thiết lập cũng có thể khai báo theo pool bằng các chỉ thị phù hợp. Cần phân biệt cấu hình PHP-FPM với cấu hình PHP chung và kiểm tra đúng phiên bản mà website sử dụng. Thay đổi ở PHP CLI không nhất thiết áp dụng cho PHP-FPM.
Quy trình áp dụng và xử lý lỗi sau khi chỉnh
Thực hiện thay đổi theo từng bước để dễ xác định nguyên nhân nếu phát sinh sự cố:
Sao lưu tệp cấu hình pool và ghi lại giá trị ban đầu.
Xác nhận pool đang được website sử dụng, cùng địa chỉ socket hoặc TCP.
Thay đổi một hoặc vài thông số có liên quan; tránh chỉnh nhiều nhóm cùng lúc.
Chạy lệnh kiểm tra cú pháp phù hợp với bản PHP đang dùng.
Nếu cấu hình hợp lệ, tải lại hoặc khởi động lại dịch vụ theo quy trình của hệ điều hành. Ví dụ: sudo systemctl reload php8.2-fpm; nếu reload không được hỗ trợ, xem hướng dẫn dịch vụ trước khi dùng restart.
Kiểm tra trạng thái dịch vụ, nhật ký và truy cập website sau khi áp dụng.
Khi gặp lỗi 502 Bad Gateway hoặc máy chủ web không kết nối được PHP-FPM, hãy kiểm tra dịch vụ có đang chạy không, địa chỉ listen có khớp với cấu hình máy chủ web không và quyền truy cập socket có phù hợp không. Nếu website chậm khi tải cao, theo dõi RAM, CPU, thời gian phản hồi và số tiến trình đang hoạt động trước khi tăng pm.max_children.
Thông tin trạng thái PHP-FPM có thể hỗ trợ giám sát, nhưng trang status hoặc endpoint ping không nên để công khai trên Internet. Nếu bật, hãy giới hạn quyền truy cập theo mạng hoặc cấu hình máy chủ web phù hợp. Sau khi khắc phục, kiểm tra lại nhật ký và cân nhắc tắt endpoint nếu không còn cần thiết.
Kết luận
PHP-FPM là lớp quản lý tiến trình giúp máy chủ web giao tiếp với PHP. Khi quản trị PHP-FPM trên VPS, hãy bắt đầu bằng việc xác định đúng phiên bản, dịch vụ, pool và socket; sau đó mới điều chỉnh chế độ quản lý tiến trình cùng các giới hạn dựa trên tài nguyên thực tế. Kiểm tra cú pháp, sao lưu và theo dõi sau mỗi thay đổi sẽ giúp giảm rủi ro ảnh hưởng website.
Nếu website cần môi trường máy chủ riêng để chủ động quản lý PHP và các dịch vụ liên quan, bạn có thể tham khảo các gói VPS AMD EPYC Gen 3 hoặc VPS Platinum Gen 2 của VibeVPS, hiện có gói từ 81.000đ/tháng. Hãy chọn tài nguyên dựa trên nhu cầu vận hành và tải thực tế của dự án.
Website WordPress có dấu hiệu bị chuyển hướng, xuất hiện nội dung lạ hoặc gửi thư rác? Tìm hiểu cách nhận biết, xử lý sự cố theo từng bước và giảm nguy cơ tái nhiễm.