Jak skonfigurować oddzielne pule PHP-FPM w NGINX
Opublikowano: 15 lutego 2025 11:52:50 UTC
W tym artykule omówię kroki konfiguracji niezbędne do uruchomienia wielu pul PHP-FPM i połączenia z nimi NGINX za pośrednictwem FastCGI, co pozwala na rozdzielenie procesów i izolację między hostami wirtualnymi.
How to Set Up Separate PHP-FPM Pools in NGINX
Informacje w tym poście odnoszą się do NGINX 1.4.6 i PHP-FPM 5.5.9 działających na Ubuntu Server 14.04 x64. Mogą być lub nie być ważne dla innych wersji. (Aktualizacja: Mogę potwierdzić, że w Ubuntu Server 24.04, PHP-FPM 8.3 i NGINX 1.24.0 wszystkie instrukcje w tym poście nadal działają)
Istnieje szereg zalet konfigurowania wielu pul procesów potomnych PHP-FPM zamiast uruchamiania wszystkiego w tej samej puli. Bezpieczeństwo, separacja/izolacja i zarządzanie zasobami przychodzą na myśl jako kilka głównych.
Niezależnie od tego, jaka jest Twoja motywacja, ten post pomoże Ci ją osiągnąć :-)
Część 1 – Konfigurowanie nowego puli PHP-FPM
Najpierw musisz zlokalizować katalog, w którym PHP-FPM przechowuje konfiguracje puli. W Ubuntu 14.04 jest to domyślnie /etc/php5/fpm/pool.d. Prawdopodobnie jest tam już plik o nazwie www.conf , który zawiera konfigurację domyślnej puli. Jeśli wcześniej nie przeglądałeś tego pliku, prawdopodobnie powinieneś go przejrzeć i dostosować ustawienia do swojej konfiguracji, ponieważ domyślne ustawienia są przeznaczone dla dość niedostatecznie wydajnego serwera, ale na razie zrób jego kopię, abyśmy nie musieli zaczynać od zera:
Oczywiście zamień „mypool” na nazwę, którą chcesz nadać puli.
Teraz otwórz nowy plik za pomocą nano lub dowolnego innego edytora tekstu, który wolisz i dostosuj go do swoich potrzeb. Prawdopodobnie będziesz chciał zmienić numery procesów potomnych i ewentualnie użytkownika i grupę, pod którą działa pula, ale dwa ustawienia, które musisz bezwzględnie zmienić, to nazwa puli i gniazdo, którego nasłuchuje, w przeciwnym razie będzie kolidować z istniejącą pulą i wszystko przestanie działać.
Nazwa puli znajduje się na górze pliku, ujęta w nawiasy kwadratowe. Domyślnie jest to [www] . Zmień to na cokolwiek chcesz; proponuję nazwę taką samą, jaką nadałeś plikowi konfiguracyjnemu, więc na potrzeby tego przykładu zmień ją na [mypool] . Jeśli jej nie zmienisz, wygląda na to, że PHP-FPM załaduje tylko pierwszy plik konfiguracyjny o tej nazwie, co prawdopodobnie wszystko zepsuje.
Następnie musisz zmienić gniazdo lub adres, którego słuchasz, co jest zdefiniowane przez dyrektywę listen . Domyślnie PHP-FPM używa gniazd Unix, więc Twoja dyrektywa listen prawdopodobnie będzie wyglądać tak:
Możesz zmienić ją na dowolną inną, prawidłową nazwę, ale ponownie sugeruję pozostanie przy czymś podobnym do nazwy pliku konfiguracyjnego, więc możesz na przykład ustawić ją tak:
Dobrze, zapisz plik i wyjdź z edytora tekstu.
Część 2 – Aktualizacja konfiguracji wirtualnego hosta NGINX
Teraz musisz otworzyć plik wirtualnego hosta NGINX z konfiguracją FastCGI, którą chcesz zmienić na nową pulę – lub raczej połączyć się z nowym gniazdem.
Domyślnie w Ubuntu 14.04 są one przechowywane w /etc/nginx/sites-available, ale można je również zdefiniować gdzie indziej. Prawdopodobnie najlepiej wiesz, gdzie znajdują się konfiguracje Twojego wirtualnego hosta ;-)
Otwórz odpowiedni plik konfiguracyjny w swoim ulubionym edytorze tekstu i poszukaj dyrektywy fastcgi_pass (która musi być w kontekście lokalizacji) definiującej gniazdo PHP-FPM. Musisz zmienić tę wartość, aby pasowała do nowej konfiguracji puli PHP-FPM, którą utworzyłeś w kroku pierwszym, więc kontynuując nasz przykład, zmienisz to na:
fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
Następnie zapisz i zamknij również ten plik. Już prawie skończyłeś.
Część 3 – Ponowne uruchomienie PHP-FPM i NGINX
Aby zastosować zmiany konfiguracji, uruchom ponownie PHP-FPM i NGINX. Może wystarczyć ponowne załadowanie zamiast restartu , ale uważam, że jest to trochę niepewne, w zależności od tego, które ustawienia zostały zmienione. W konkretnym przypadku chciałem, aby stare procesy potomne PHP-FPM umarły od razu, więc konieczne było ponowne uruchomienie PHP-FPM, ale w przypadku NGINX ponowne załadowanie może być wystarczające. Wypróbuj to sam.
sudo service nginx restart
I voila, gotowe. Jeśli wszystko zrobiłeś poprawnie, wirtualny host, który zmodyfikowałeś, powinien teraz używać nowej puli PHP-FPM i nie współdzielić procesów potomnych z żadnym innym wirtualnym hostem.