Jak podłączyć Nginx z PHP-FPM za pomocą gniazda UNIX lub TCP/IP

Jak podłączyć Nginx z PHP-FPM za pomocą gniazda UNIX lub TCP/IP

Nginx Serwer WWW (jako odwrotny proxy) obsługuje aplikacje PHP za pośrednictwem Fastcgi protokół (jako serwer aplikacji backend). Nginx zatrudnia PHP-FPM (FastCGI Process Manager), alternatywa PHP Fastcgi implementacja, która działa w tle jako demon, słuchanie CGI upraszanie. Jest wyposażony w dodatkowe funkcje zaprojektowane do zasilania ciężkich stron internetowych lub aplikacji internetowych, ale może być używany do witryn dowolnej wielkości.

Nie tylko robi PHP-FPM Obsługuj konfigurację Fastcgi pule zasobów, ale poprawia także wiele Fastcgi wewnętrzne i zwiększa raportowanie błędów, zakończenie skryptu i wiele więcej. Posiada demonizację PHP, zarządzanie procesami, dynamiczną liczbę procesów, z których żądania mogą pojawić się, nagłówek błędów, przyspieszone wsparcie przesyłania i wiele innych.

Akceptować Fastcgi prośby z Nginx, PHP-FPM może albo słuchać na TCP/IP gniazdo lub gniazdo domeny unix. Niezależnie od tego, który adres, którego zdecydujesz się użyć, jest tym, co Nginx używa do połączenia (żądania proxy) do PHP-FPM, używając fastcgi_pass dyrektywa.

Ten przewodnik wyjaśnia, jak skonfigurować Nginx do serwera aplikacji PHP za pomocą PHP-FPM. Opisuje, kiedy użyć TCP/IP gniazdo lub gniazdo domeny unix do łączenia Nginx Do PHP-FPM i dlaczego.

Ten przewodnik zakłada, że ​​masz Nginx I PHP-FPM Zainstalowane w systemie Linux, w przeciwnym razie patrz:

  • Jak zainstalować serwer LEMP na CentOS 8
  • Jak zainstalować stos Lemp PhpMyAdmin w Ubuntu 20.04 Serwer
  • Jak zainstalować Nginx, MySQL/Mariadb i PHP na RHEL 8
  • Jak zainstalować LEMP na serwerze Debian 10

Czego powinienem użyć: gniazdo domeny Unix lub gniazdo TCP/IP?

UNIX domena (lub IPC) Gniazda są środkiem komunikacji między procesami (IPC), które umożliwiają wydajną wymianę danych między procesami działającymi w tym samym systemie operacyjnym, a TCP/IP (Lub Domena internetowa) Gniazda pozwalają procesom komunikować się przez sieć.

W przeciwieństwie do TCP/IP gniazdo, które identyfikuje serwer według adresu IP i portu (e.G 127.0.0.1: 9000), możesz powiązać serwer do gniazda domeny unix za pomocą nazwy pliku (e.G /run/php-fpm/www.skarpetka), który jest widoczny w systemie plików.

Gniazdo domeny UNIX jest specjalnym typem pliku - plik i katalogu mają zastosowanie do niego (podobnie jak w przypadku dowolnego innego typu pliku UNIX) i może być używany do ograniczenia, które procesy na hosta mogą odczytać i zapisać do pliku, (i w ten sposób komunikować się z serwerem zaplecza).

W ten sposób gniazdo domeny Unix jest bezpieczne, ponieważ tylko procesy na lokalnym hoście mogą z niego korzystać. A TCP/IP Gniazdo może być narażone na Internet stanowiące ryzyko bezpieczeństwa, chyba że wdrożone zostaną dodatkowe środki bezpieczeństwa, takie jak zapora ogniowa.

Co ważne, za pomocą UNIX Gniazdo domeny nie jest takie samo, jak przy użyciu TCP/IP Gniazdo dotyczące wydajności kilka testów i punktów porównawczych udowodniło, że gniazda domeny Unix są szybsze. Główną wadą gniazd domen UNIX jest to, że są one mniej skalowalne, obsługują one tylko komunikację międzyprocesową w tym samym systemie operacyjnym (OS).

Gdzie mogę skonfigurować adres słuchania PHP-FPM?

Możesz skonfigurować adres PHP-FPM Słucha w pliku konfiguracyjnym puli zasobów. Zwróć to do zauważenia PHP-FPM, Możesz uruchomić kilka pul procesów o różnych ustawieniach. Nazywana jest domyślna pula www.

Lokalizacja pliku konfiguracji puli zasobów zależy od drogi Php I PHP-FPM są instalowane w systemie Linux (niezależnie od tego, czy jest to jednocześnie domyślna/pojedyncza wersja, czy wiele wersji).

Na przykład, na Centos 8, Z jedną wersją wszystkie pliki konfiguracyjne PHP znajdują się w /itp katalog i domyślnie PHP-FPM basen (www) Plik konfiguracyjny jest /etc/php-fpm.D/www.conf:

Aby wymienić wszystkie pliki konfiguracyjne PHP, użyj następującego polecenia LS.

# ls /etc /php* 
Wymień wszystkie pliki konfiguracyjne PHP

NA Ubuntu 20.04, Pliki konfiguracyjne PHP znajdują się w /etc/php // katalog i domyślnie PHP-FPM basen (www) Plik konfiguracyjny jest /etc/php // fpm/basen.D/www.conf:

$ ls/etc/php/7.4/ 
Wymień wszystkie pliki konfiguracyjne PHP na Ubuntu

Konfigurowanie PHP-FPM do słuchania w gnieździe domeny Unix

Konfigurować PHP-FPM Aby słuchać gniazda domeny unix, otwórz domyślną PHP-FPM Plik konfiguracyjny puli, za pomocą ulubionego edytora tekstu.

$ sudo vim/etc/php/7.4/fpm/basen.D/www.conf # ubuntu/debian lub # vim/etc/php-fpm.D/www.Conf #Centos/Rhel/Fedora 

Następnie poszukaj dyrektywy słuchania i ustaw ją na nazwa ścieżki pliku gniazda domeny unix. Zauważ, że większość instalacji domyślnie używa gniazda domeny unix.

Słuchaj =/run/php/php7.4-fpm.Sock #ubuntu/debian lub słuchaj =/run/php-fpm/www.Sock #Centos/Rhel/Fedora 

Jeśli używasz gniazda domeny Unix, musisz również ustawić odpowiednie uprawnienia odczytu/zapisu dla pliku, aby umożliwić połączenia z serwera WWW Nginx. Domyślnie Nginx działa jako użytkownik i grupa nginx NA Centos/Rhel/Fedora I www-data NA Ubuntu I Debian.

Więc znajdź Słuchać.właściciel I Słuchać.Grupa parametry i odpowiednio je ustawić. Ustaw także tryb na 0660 używając Słuchać.tryb parametr.

------------- Na Debian i Ubuntu ------------- Słuchać.właściciel = www-data słuchaj.grupa = www-data słuchaj.Tryb = 0660 ------------- Na Centos/Rhel i Fedora ------------- Słuchać.właściciel = nginx słuchaj.grupa = nginx słuchaj.Tryb = 0660 

Zauważ, że jeśli uprawnienia w pliku gniazda domeny unix nie są ustawione poprawnie, Nginx może zwrócić błąd złej bramy.

Konfiguracja PHP-FPM

Konfigurowanie PHP-FPM do słuchania w gnieździe TCP/IP

Chociaż gniazdo domeny Unix jest szybsze niż gniazdo TCP/IP, pierwsza jest mniej skalowalna, ponieważ może obsługiwać komunikację międzyprocesową na tym samym systemie operacyjnym. Jeśli Nginx oraz serwer aplikacji backend (PHP-FPM) działają w różnych systemach, będziesz musiał skonfigurować PHP-FPM Aby słuchać gniazda TCP/IP dla połączeń.

w PHP-FPM Plik konfiguracyjny puli, ustaw Słuchać adres w następujący sposób. Upewnij się, że wybrany port nie jest używany przez inny proces lub usługa w tym samym systemie.

Słuchaj = 127.0.0.1: 3000 
Konfiguracja PHP-FPM dla gniazda TCP

Konfigurowanie Nginx do pracy z serwerem aplikacji PHP-FPM

Po skonfigurowaniu adresu PHP-FPM słucha, musisz skonfigurować Nginx do prośby o to za pośrednictwem tego adresu, korzystając z fastcgi_pass Parametr konfiguracyjny, w wirtualnym pliku konfiguracyjnym serwera.

Na przykład, jeśli plik konfiguracyjny dla Twojej witryny jest /etc/nginx/conf.d/przykład.com.conf, Otwórz go do edycji.

# vim/etc/nginx/conf.d/przykład.com.conf 

Spójrz na Lokalizacja blok do przetwarzania .php pliki i ustaw fastcgi_pass Parametr w następujący sposób, jeśli skonfigurowałeś PHP-FPM do słuchania w gnieździe domeny unix.

fastcgi_pass unix:/run/php/php7.4-fpm.Sock #Ubuntu/Debian lub Fastcgi_Pass Unix:/run/php-fpm/www.Sock #Centos/Rhel/Fedora 
Podłącz Nginx do PHP-FPM za pomocą gniazda UNIX

Lub użyj TCP/IP Adres, jeśli skonfigurowałeś PHP-FPM słuchać na TCP/IP gniazdo elektryczne. Jeśli serwer aplikacji backend (PHP-FPM) działa na osobnym serwerze (zamień 10.42.0.10 z adresem IP maszyny, na którym działa serwer FastCGI PHP-FPM).

fastcgi_pass 10.42.0.10: 3000; 
Podłącz Nginx do PHP-FPM za pomocą gniazda TCP

Ważny: NA Centos 8, PHP-FPM jest zdefiniowany jako serwer upstream w /etc/nginx/conf.D/PHP-FPM.conf Plik w bloku upstream, z nazwą PHP-FPM.

Możesz odpowiednio wprowadzić zmiany w zależności od adresu PHP-FPM jest skonfigurowany do słuchania, w pliku konfiguracji puli. Domyślna konfiguracja wskazuje na gniazdo domeny Unix.

Upstream PHP-FPM Server Unix:/run/php-fpm/www.skarpetka;  
Skonfiguruj serwer PHP Upstream w Nginx

oraz w pliku blokowym serwera witryny, po prostu ustaw fastcgi_pass parametr jak pokazano.

fastcgi_pass php-fpm; 
Skonfiguruj Nginx na serwer PHP-FPM

Po wprowadzeniu zmian w PHP-FPM I Nginx Konfiguracje, sprawdź ich składnię konfiguracji pod kątem poprawności w następujący sposób.

------------- Na Debian i Ubuntu ------------- $ sudo php -fpm -t $ sudo nginx -t ------------- Na Centos/Rhel i Fedora ------------- # php -fpm -t # nginx -t 

Podczas gdy wyjście polecenia pokazuje tylko główny plik konfiguracyjny, wszystkie pozostałe pliki konfiguracyjne są również uwzględnione i sprawdzane.

Sprawdź konfigurację Nginx i PHP-FPM

Następnie musisz ponownie uruchomić dwie usługi, aby zastosować zmiany za pomocą polecenia SystemCtl.

------------- Na Debian i Ubuntu ------------- $ sudo systemctl restart nginx $ sudo systemctl restart php7.4-fpm ------------- Na Centos/Rhel i Fedora ------------- # Systemctl restart nginx # Systemctl restart php-fpm 

Jeśli otrzymasz jakieś błędy, możesz sprawdzić Nginx I PHP-FPM pliki dziennika za pomocą polecenia CAT.

------------- Na Debian i Ubuntu ------------- $ cat/var/log/nginx/błąd.Log $ cat/var/log/php7.4-fpm.dziennik ------------- Na Centos/Rhel i Fedora ------------- $ cat/var/log/nginx/błąd.log $ cat/var/log/php-fpm/www-error.dziennik 

To wszystko, co dla ciebie mieliśmy. Poniższa sekcja komentarza można użyć do zadawania pytań. Aby uzyskać więcej informacji, zobacz dokumentację Nginx i dokumentację PHP-FPM.