Miklix

Cách thiết lập các nhóm PHP-FPM riêng biệt trong NGINX

Đã xuất bản: lúc 11:54:31 UTC 15 tháng 2, 2025
Cập nhật lần cuối: lúc 08:30:12 UTC 12 tháng 1, 2026

Trong bài viết này, tôi sẽ trình bày các bước cấu hình cần thiết để chạy nhiều nhóm PHP-FPM và kết nối NGINX với chúng thông qua FastCGI, cho phép phân tách và cách ly tiến trình giữa các máy chủ ảo.


Trang này được dịch máy từ tiếng Anh để có thể tiếp cận được với nhiều người nhất có thể. Thật không may, dịch máy vẫn chưa phải là công nghệ hoàn thiện, do đó có thể xảy ra lỗi. Nếu bạn thích, bạn có thể xem phiên bản tiếng Anh gốc tại đây:

How to Set Up Separate PHP-FPM Pools in NGINX

Thông tin trong bài viết này dựa trên NGINX 1.4.6 và PHP-FPM 5.5.9 chạy trên Ubuntu Server 14.04 x64. Nó có thể đúng hoặc không đúng với các phiên bản khác. (Cập nhật: Tôi xác nhận rằng kể từ Ubuntu Server 24.04, PHP-FPM 8.3 và NGINX 1.24.0, tất cả các hướng dẫn trong bài viết này vẫn hoạt động)

Việc thiết lập nhiều nhóm tiến trình con PHP-FPM thay vì chạy tất cả trong cùng một nhóm mang lại một số lợi ích. Bảo mật, phân tách/cách ly và quản lý tài nguyên là một vài lợi ích chính cần lưu ý.

Cho dù động lực của bạn là gì, bài viết này sẽ giúp bạn thực hiện được điều đó :-)

Phần 1 – Thiết lập nhóm PHP-FPM mới

Đầu tiên, bạn cần xác định vị trí thư mục nơi PHP-FPM lưu trữ cấu hình pool của nó. Trên Ubuntu 14.04, theo mặc định, thư mục này là /etc/php5/fpm/pool.d. Có thể đã có sẵn một tệp tin tên là www.conf, chứa cấu hình cho pool mặc định. Nếu bạn chưa từng xem tệp tin đó trước đây, có lẽ bạn nên xem qua và điều chỉnh các thiết lập trong đó cho phù hợp với cấu hình máy chủ của mình vì các thiết lập mặc định dành cho một máy chủ khá yếu, nhưng hiện tại chỉ cần sao chép tệp tin đó để chúng ta không phải bắt đầu lại từ đầu:

sudo cp www.conf mypool.conf

Tất nhiên, bạn có thể thay thế "mypool" bằng tên mà bạn muốn đặt cho hồ bơi của mình.

Bây giờ hãy mở tệp mới bằng nano hoặc bất kỳ trình soạn thảo văn bản nào bạn thích và điều chỉnh nó cho phù hợp với mục đích của bạn. Có thể bạn sẽ muốn điều chỉnh số thứ tự tiến trình con và có thể cả người dùng và nhóm mà pool chạy dưới đó, nhưng hai thiết lập mà bạn nhất định phải thay đổi là tên của pool và socket mà nó đang lắng nghe, nếu không nó sẽ xung đột với pool hiện có và mọi thứ sẽ ngừng hoạt động.

Tên của pool nằm gần đầu file, được đặt trong dấu ngoặc vuông. Mặc định là [www]. Hãy thay đổi nó thành bất kỳ tên nào bạn muốn; tôi đề nghị đặt tên giống với tên file cấu hình, vì vậy để đơn giản hóa ví dụ này, hãy đổi nó thành [mypool]. Nếu bạn không thay đổi, có vẻ như PHP-FPM sẽ chỉ tải file cấu hình đầu tiên có tên đó, điều này có thể gây ra lỗi.

Tiếp theo, bạn cần thay đổi socket hoặc địa chỉ mà bạn đang lắng nghe, được xác định bởi chỉ thị `listen`. Theo mặc định, PHP-FPM sử dụng socket Unix, vì vậy chỉ thị `listen` của bạn có thể sẽ trông như thế này:

listen = /var/run/php5-fpm.sock

Bạn có thể đổi nó thành bất kỳ tên hợp lệ nào bạn muốn, nhưng một lần nữa, tôi khuyên bạn nên giữ nguyên tên tương tự như tên tệp cấu hình, ví dụ như bạn có thể đặt nó thành:

listen = /var/run/php5-fpm-mypool.sock

Được rồi, hãy lưu tệp và thoát khỏi trình soạn thảo văn bản.

Phần 2 – Cập nhật cấu hình máy chủ ảo NGINX

Bây giờ bạn cần mở tệp cấu hình máy chủ ảo NGINX với cấu hình FastCGI mà bạn muốn thay đổi sang một pool mới – hay nói cách khác, kết nối với socket mới.

Theo mặc định trên Ubuntu 14.04, các cấu hình này được lưu trữ trong thư mục /etc/nginx/sites-available, nhưng cũng có thể được định nghĩa ở nơi khác. Có lẽ bạn là người biết rõ nhất vị trí lưu trữ cấu hình máy chủ ảo của mình ;-)

Mở tệp cấu hình liên quan bằng trình soạn thảo văn bản yêu thích của bạn và tìm chỉ thị fastcgi_pass (phải nằm trong ngữ cảnh location) định nghĩa socket PHP-FPM. Bạn phải thay đổi giá trị này sao cho phù hợp với cấu hình pool PHP-FPM mới mà bạn đã thực hiện ở bước một, vì vậy, tiếp tục ví dụ của chúng ta, bạn sẽ thay đổi nó thành:

Fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;

Sau đó, hãy lưu và đóng tệp đó lại. Bạn gần như đã hoàn thành rồi.

Phần 3 – Khởi động lại PHP-FPM và NGINX

Để áp dụng các thay đổi cấu hình bạn đã thực hiện, hãy khởi động lại cả PHP-FPM và NGINX. Có thể chỉ cần tải lại trang thay vì khởi động lại, nhưng tôi thấy cách này khá hên xui, tùy thuộc vào cài đặt nào được thay đổi. Trong trường hợp cụ thể này, tôi muốn các tiến trình con PHP-FPM cũ dừng ngay lập tức, vì vậy cần phải khởi động lại PHP-FPM, nhưng đối với NGINX thì việc tải lại trang có thể là đủ. Hãy thử tự mình kiểm chứng nhé.

sudo service php5-fpm restart
sudo service nginx restart

Và thế là xong. Nếu bạn đã làm mọi thứ đúng cách, máy chủ ảo mà bạn đã sửa đổi giờ đây sẽ sử dụng nhóm PHP-FPM mới và không chia sẻ các tiến trình con với bất kỳ máy chủ ảo nào khác.

Chia sẻ trên BlueskyChia sẻ trên FacebookChia sẻ trên LinkedInChia sẻ trên TumblrChia sẻ trên XChia sẻ trên LinkedInGhim trên Pinterest

Mikkel Christensen

Về tác giả

Mikkel Christensen
Mikkel là người sáng lập và chủ sở hữu của miklix.com. Ông có hơn 20 năm kinh nghiệm làm lập trình viên máy tính/nhà phát triển phần mềm chuyên nghiệp và hiện đang làm việc toàn thời gian cho một tập đoàn CNTT lớn của Châu Âu. Khi không viết blog, ông dành thời gian rảnh rỗi cho nhiều sở thích, thú vui và hoạt động, có thể được phản ánh ở một mức độ nào đó trong nhiều chủ đề được đề cập trên trang web này.