Sådan tilsluttes NGINX til PHP-FPM ved hjælp af UNIX- eller TCP/IP-stik


NGINX webserver (som omvendt proxy) betjener PHP-applikationer gennem FastCGI-protokollen (som en backend-applikationsserver). NGINX anvender PHP-FPM (FastCGI Process Manager), en alternativ PHP FastCGI-implementering, der kører i baggrunden som en dæmon, der lytter til CGI-anmodninger. Den leveres med ekstra funktioner designet til at drive tungt belastede websteder eller webapplikationer, men den kan bruges til websteder af enhver størrelse.

Ikke kun understøtter PHP-FPM konfiguration af FastCGI-ressourcepuljer, men det forbedrer også mange af FastCGI-internerne og øger fejlrapportering, scriptafslutning og meget mere. Den indeholder PHP-dæmonisering, processtyring, dynamisk antal processer, hvorfra anmodninger kan komme fra, fejlhoved, accelereret upload-support og mere.

For at acceptere FastCGI-anmodninger fra NGINX kan PHP-FPM enten lytte på et TCP/IP-stik eller UNIX-domænesokkel. Uanset hvilken adresse du vælger at bruge, er hvad NGINX bruger til at oprette forbindelse (proxyanmodninger) til PHP-FPM ved hjælp af fastcgi_pass -direktivet.

Denne vejledning forklarer, hvordan du konfigurerer NGINX til server-PHP-applikationer ved hjælp af PHP-FPM. Den beskriver, hvornår man skal bruge et TCP/IP-stik eller UNIX-domænesokkel til at forbinde NGINX til PHP-FPM, og hvorfor.

Denne vejledning forudsætter, at du har NGINX og PHP-FPM installeret på dit Linux-system, ellers se:

  • Sådan installeres LEMP-server på CentOS 8
  • Sådan installeres LEMP-stak PhpMyAdmin i Ubuntu 20.04 Server
  • Sådan installeres NGINX, MySQL/MariaDB og PHP på RHEL 8
  • Sådan installeres LEMP på Debian 10 Server

UNIX domæne (eller IPC) stikkontakter er et middel til kommunikation mellem processer (IPC), der muliggør effektiv dataudveksling mellem processer, der kører på det samme operativsystem, mens TCP/IP (eller Internet Domain) stikkene tillader processer at kommunikere over et netværk.

I modsætning til et TCP/IP-stik, der identificerer en server ved en IP-adresse og port (f.eks. 127.0.0.1:9000), kan du binde en server til et UNIX-domænesokkel ved hjælp af et filstinavn (f.eks./Run/php-fpm/www. sok), som er synlig i filsystemet.

Et UNIX-domænesokkel er en særlig filtype - fil- og katalogtilladelser gælder for det (som det er tilfældet med enhver anden type UNIX-fil) og kan bruges til at begrænse, hvilke processer på værten, der kan læse og skrive til filen, (og dermed kommunikere med backend-serveren).

På denne måde er et UNIX-domænesokkel sikkert, fordi kun processer på den lokale vært kan bruge det. Et TCP/IP-stik kan være udsat for internettet, der udgør en sikkerhedsrisiko, medmindre der implementeres ekstra sikkerhedsforanstaltninger såsom en firewall.

Det er vigtigt, at brug af et UNIX-domænesokkel ikke er det samme som at bruge et TCP/IP-stik med hensyn til ydeevne, flere tests og benchmarks har vist, at UNIX-domænesokler er hurtigere. Den største ulempe ved UNIX domænesockets er, at de er mindre skalerbare, de understøtter kun inter-proces kommunikation inden for det samme operativsystem (OS).

Du kan konfigurere adressen, som PHP-FPM lytter til, i en ressourcepoolkonfigurationsfil. Bemærk, at med PHP-FPM kan du køre flere puljer af processer med forskellige indstillinger. Standardpuljen hedder www .

Placeringen af ressourcepoolkonfigurationsfilen afhænger af, hvordan PHP og PHP-FPM er installeret på et Linux-system (hvad enten det er en standard/enkelt version eller flere versioner samtidigt).

For eksempel findes på CentOS 8 med en enkelt version alle PHP-konfigurationsfiler i /etc -mappen, og standard PHP-FPM-pool (www) -konfigurationsfilen er /etc/php-fpm.d/www.conf:

Brug følgende ls-kommando til at liste alle PHP-konfigurationsfiler.

# ls /etc/php*

På Ubuntu 20.04 er PHP-konfigurationsfilerne placeret i /etc/php// -mappen og standard PHP-FPM-pool (www) -konfigurationsfil er /etc/php/ /fpm/pool.d/www.conf :

$ ls /etc/php/7.4/

Konfiguration af PHP-FPM til at lytte på en UNIX-domænesokkel

For at konfigurere PHP-FPM til at lytte til et UNIX-domænesokkel skal du åbne din standard PHP-FPM-poolkonfigurationsfil ved hjælp af din foretrukne teksteditor.

# vim /etc/php-fpm.d/www.conf			#Ubuntu/Debian
OR
$ sudo vim /etc/php/7.4/fpm/pool.d/www.conf	#CentOS/RHEL/Fedora

Kig derefter efter lyttedirektivet, og indstil det til filstiens navn på UNIX-domænesocket som følger. Bemærk, at de fleste installationer som standard bruger et UNIX-domænesokkel.

listen = /run/php/php7.4-fpm.sock	#Ubuntu/Debian
OR
listen = /run/php-fpm/www.sock		#CentOS/RHEL/Fedora

Hvis du bruger et UNIX-domænesokkel, skal du også indstille passende læse-/skrivetilladelser til filen for at tillade forbindelser fra NGINX-webserveren. Som standard kører NGINX som bruger og gruppe nginx på CentOS/RHEL/Fedora og www-data på Ubuntu og Debian.

Så find parametrene listen.owner og listen.group og indstil dem i overensstemmelse hermed. Indstil også tilstanden til 0660 ved hjælp af parameteren listen.mode .

------------- On Debian and Ubuntu -------------
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

------------- On CentOS/RHEL and Fedora  -------------
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

Bemærk, at hvis tilladelserne til UNIX-domænesocketfil ikke er indstillet korrekt, kan NGINX muligvis returnere en dårlig gateway-fejl.

Konfiguration af PHP-FPM til at lytte på en TCP/IP-stik

Selvom et UNIX-domænesokkel er hurtigere end et TCP/IP-stik, er førstnævnte mindre skalerbart, fordi det kun kan understøtte kommunikation mellem processer på det samme operativsystem. Hvis NGINX og backend-applikationsserveren (PHP-FPM) kører på forskellige systemer, skal du konfigurere PHP-FPM til at lytte til et TCP/IP-stik for forbindelser.

I PHP-FPM-poolkonfigurationsfilen skal du indstille listen -adressen som følger. Sørg for, at den valgte port ikke bruges af en anden proces eller tjeneste på det samme system.

listen = 127.0.0.1:3000

Konfiguration af NGINX til at arbejde med PHP-FPM Application Server

Når du har konfigureret adressen PHP-FPM lytter til, skal du konfigurere NGINX til proxyanmodning til den via den adresse ved hjælp af fastcgi_pass konfigurationsparameteren i en virtuel serverblokkonfigurationsfil.

For eksempel, hvis konfigurationsfilen til dit websted er /etc/nginx/conf.d/example.com.conf, skal du åbne den til redigering.

# vim /etc/nginx/conf.d/example.com.conf 

Se efter location -blokken til behandling af .php -filer, og indstil fastcgi_pass -parameteren som følger, hvis du har konfigureret PHP-FPM til at lytte på en UNIX domænesokkel.

fastcgi_pass unix:/run/php/php7.4-fpm.sock	#Ubuntu/Debian
OR
fastcgi_pass unix:/run/php-fpm/www.sock		#CentOS/RHEL/Fedora

Eller brug en TCP/IP-adresse, hvis du har konfigureret PHP-FPM til at lytte til et TCP/IP-stik. Hvis backend-applikationsserveren (PHP-FPM) kører på en separat server (udskift 10.42.0.10 med IP-adressen på den maskine, hvor PHP-FPM FastCGI-serveren kører).

fastcgi_pass  10.42.0.10:3000;

Vigtigt: På CentOS 8 er PHP-FPM defineret som en upstream-server i /etc/nginx/conf.d/php-fpm.conf-filen inden for en opstrømsblok med navnet php-fpm.

Du kan foretage ændringer her i overensstemmelse hermed afhængigt af den adresse, PHP-FPM er konfigureret til at lytte til, i poolkonfigurationsfilen. Standardkonfigurationen peger på et UNIX-domænesokkel.

upstream php-fpm {
        server unix:/run/php-fpm/www.sock;
}

og i dit websteds serverblokfil skal du blot indstille parameteren fastcgi_pass som vist.

fastcgi_pass php-fpm;

Efter at have foretaget ændringer i PHP-FPM- og NGINX-konfigurationerne, skal du kontrollere deres konfigurationssyntaks for korrekthed som følger.

------------- On Debian and Ubuntu -------------
$ sudo php-fpm -t
$ sudo nginx -t

------------- On CentOS/RHEL and Fedora  -------------
# php-fpm -t
# nginx -t

Mens kommandooutputtet kun viser hovedkonfigurationsfilen, inkluderes og kontrolleres alle andre konfigurationsfiler også.

Dernæst skal du genstarte de to tjenester for at anvende ændringerne ved hjælp af systemctl-kommandoen.

------------- On Debian and Ubuntu -------------
$ sudo systemctl restart nginx
$ sudo systemctl restart php7.4-fpm

------------- On CentOS/RHEL and Fedora  -------------
# systemctl restart nginx
# systemctl restart php-fpm

Hvis du får fejl, kan du kontrollere NGINX- og PHP-FPM-logfiler ved hjælp af cat-kommandoen.

------------- On Debian and Ubuntu -------------
$ cat /var/log/nginx/error.log
$ cat /var/log/php7.4-fpm.log

------------- On CentOS/RHEL and Fedora  -------------
$ cat /var/log/nginx/error.log
$ cat /var/log/php-fpm/www-error.log

Det er alt, hvad vi havde for dig. Kommentarsektionen nedenfor kan bruges til at stille spørgsmål. For mere information, se NGINX-dokumentationen og PHP-FPM-dokumentationen.