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
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 tách biệt và cô lập quy trình giữa các máy chủ ảo.
How to Set Up Separate PHP-FPM Pools in NGINX
Thông tin trong bài đăng 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. Thông tin này có thể hoặc không thể áp dụng cho các phiên bản khác. (Cập nhật: Tôi có thể 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 đăng này vẫn hoạt động)
Có một số lợi thế khi thiết lập nhiều nhóm tiến trình con PHP-FPM thay vì chạy mọi thứ trong cùng một nhóm. Bảo mật, phân tách/cô lập và quản lý tài nguyên là một số lợi thế chính.
Bất kể động lực của bạn là gì, bài viết này sẽ giúp bạn thực hiện điều đó :-)
Phần 1 – Thiết lập nhóm PHP-FPM mới
Trước 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 nhóm của nó. Trên Ubuntu 14.04, đây là /etc/php5/fpm/pool.d theo mặc định. Có lẽ đã có một tệp ở đó có tên là www.conf , chứa cấu hình cho nhóm mặc định. Nếu bạn chưa xem tệp đó trước đây, rất có thể bạn nên xem qua và điều chỉnh các cài đặt trong đó cho thiết lập của mình vì các cài đặt mặc định dành cho máy chủ khá yếu, nhưng hiện tại chỉ cần tạo một bản sao của nó để chúng ta không phải bắt đầu lại từ đầu:
Tất nhiên, hãy thay thế “mypool” bằng bất cứ tên nào bạn muốn đặt cho pool 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 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ố tiến trình con và có thể là người dùng và nhóm mà nhóm chạy dưới, nhưng hai thiết lập mà bạn nhất định phải thay đổi là tên nhóm và ổ cắm mà nhóm đang lắng nghe, nếu không nó sẽ xung đột với nhóm hiện tại và mọi thứ sẽ ngừng hoạt động.
Tên của nhóm nằm gần đầu tệp, được đặt trong dấu ngoặc vuông. Theo mặc định là [www] . Hãy đổi tên này thành bất kỳ tên nào bạn muốn; Tôi đề xuất tên giống như tên bạn đặt cho tệp cấu hình, vì vậy, vì mục đích của ví dụ này, hãy đổi thành [mypool] . Nếu bạn không đổi, có vẻ như PHP-FPM sẽ chỉ tải tệp cấu hình đầu tiên có tên đó, điều này có thể làm hỏng mọi thứ.
Sau đó, bạn cần thay đổi socket hoặc địa chỉ mà bạn đang lắng nghe, được định nghĩa bởi chỉ thị listen . Theo mặc định, PHP-FPM sử dụng socket Unix nên chỉ thị listen của bạn có thể trông như thế này:
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 sử dụng tên tương tự như tên tệp cấu hình, ví dụ như bạn có thể đặt thành:
Được rồi, 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 máy chủ ảo NGINX với cấu hình FastCGI mà bạn muốn thay đổi thành một nhóm mới – hay nói đúng hơn là kết nối với socket mới.
Theo mặc định trên Ubuntu 14.04, những thứ này được lưu trữ trong /etc/nginx/sites-available, nhưng cũng có thể được định nghĩa ở nơi khác. Tốt nhất bạn nên biết cấu hình máy chủ ảo của mình nằm ở đâu ;-)
Mở tệp cấu hình có liên quan trong 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 vị trí) xác định socket PHP-FPM. Bạn phải thay đổi giá trị này sao cho khớp với cấu hình nhóm PHP-FPM mới mà bạn đã tạo ở bước một, vì vậy tiếp tục ví dụ của chúng tôi, bạn sẽ thay đổi thành:
fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Sau đó lưu và đóng file đó lại. Bây giờ bạn gần hoàn tất 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 reload thay vì restart , nhưng tôi thấy nó hơi tùy tiện, tùy thuộc vào các thiết lập nào được thay đổi. Trong trường hợp cụ thể, tôi muốn các tiến trình con PHP-FPM cũ chết 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, reload có thể là đủ. Hãy tự mình thử xem.
sudo service nginx restart
Và voila, bạn đã hoàn tất. Nếu bạn đã làm mọi thứ đúng, máy chủ ảo mà bạn đã sửa đổi hiện 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.