GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come connettere NGINX a PHP-FPM usando UNIX o TCP/IP Socket

NGINX il server web (come proxy inverso) serve le applicazioni PHP tramite FastCGI protocollo (come server di applicazioni back-end). NGINX utilizza PHP-FPM (FastCGI Process Manager), un'alternativa PHP FastCGI implementazione che viene eseguita in background come un demone, in ascolto di CGI richieste. Viene fornito con funzionalità extra progettate per alimentare siti Web o applicazioni Web con carichi pesanti, ma può essere utilizzato per siti di qualsiasi dimensione.

Non solo PHP-FPM supporta la configurazione di FastCGI pool di risorse, ma migliora anche molti dei FastCGI interni e aumenta la segnalazione degli errori, la terminazione degli script e molto altro. È dotato di demonizzazione PHP, gestione dei processi, numero dinamico di processi da cui possono provenire le richieste, intestazione di errore, supporto per il caricamento accelerato e altro ancora.

Per accettare FastCGI richieste da NGINX , PHP-FPM può ascoltare su un TCP/IP socket o socket di dominio UNIX. Qualunque indirizzo tu scelga di utilizzare è quello che NGINX utilizza per connettersi (richieste proxy) a PHP-FPM , utilizzando il fastcgi_pass direttiva.

Questa guida spiega come configurare NGINX al server di applicazioni PHP utilizzando PHP-FPM . Descrive quando utilizzare un TCP/IP socket o socket di dominio UNIX per connettere NGINX a PHP-FPM e perché.

Questa guida presuppone che tu abbia NGINX e PHP-FPM installato sul tuo sistema Linux, altrimenti vedi:

  • Come installare il server LEMP su CentOS 8
  • Come installare lo stack LEMP PhpMyAdmin in Ubuntu 20.04 Server
  • Come installare NGINX, MySQL/MariaDB e PHP su RHEL 8
  • Come installare LEMP su Debian 10 Server

Cosa dovrei usare:socket di dominio UNIX o socket TCP/IP?

UNIX dominio (o IPC ) i socket sono un mezzo di comunicazione tra processi (IPC) che consente uno scambio di dati efficiente tra processi in esecuzione sullo stesso sistema operativo mentre TCP/IP (o Dominio Internet ) i socket consentono ai processi di comunicare su una rete.

A differenza di un TCP/IP socket che identifica un server tramite un indirizzo IP e una porta (ad es. 127.0.0.1:9000 ), puoi associare un server a un socket di dominio UNIX utilizzando un percorso di file (ad es. /run/php-fpm/www.sock ), che è visibile nel filesystem.

Un socket di dominio UNIX è un tipo speciale di file:ad esso si applicano i permessi di file e directory (come nel caso di qualsiasi altro tipo di file UNIX) e può essere utilizzato per limitare quali processi sull'host possono leggere e scrivere sul file, (e quindi comunicare con il server back-end).

In questo modo, un socket di dominio UNIX è sicuro perché solo i processi sull'host locale possono usarlo. Un TCP/IP socket potrebbe essere esposto a Internet, ponendo un rischio per la sicurezza a meno che non vengano implementate misure di sicurezza aggiuntive come un firewall.

È importante sottolineare che utilizzando un UNIX socket di dominio non è la stessa cosa che usare un TCP/IP socket per quanto riguarda le prestazioni, numerosi test e benchmark hanno dimostrato che i socket di dominio UNIX sono più veloci. Lo svantaggio principale dei socket di dominio UNIX è che sono meno scalabili, supportano solo la comunicazione tra processi all'interno dello stesso sistema operativo (OS).

Dove posso configurare l'indirizzo di ascolto PHP-FPM?

Puoi configurare l'indirizzo PHP-FPM rimane in ascolto in un file di configurazione del pool di risorse. Tieni presente che con PHP-FPM , puoi eseguire diversi pool di processi con impostazioni diverse. Il pool predefinito si chiama www .

La posizione del file di configurazione del pool di risorse dipende dal modo in cui PHP e PHP-FPM sono installati su un sistema Linux (che sia una versione predefinita/singola o più versioni contemporaneamente).

Ad esempio, su CentOS 8 , con un'unica versione, tutti i file di configurazione PHP si trovano in /etc directory e il predefinito PHP-FPM pool (www) il file di configurazione è /etc/php-fpm.d/www.conf :

Per elencare tutti i file di configurazione PHP, usa il seguente comando ls.

# ls /etc/php*

Elenca tutti i file di configurazione PHP

Su Ubuntu 20.04 , i file di configurazione PHP si trovano in /etc/php/<php-version>/ directory e il predefinito PHP-FPM pool (www) il file di configurazione è /etc/php/<php-version>/fpm/pool.d/www.conf :

$ ls /etc/php/7.4/

Elenca tutti i file di configurazione PHP su Ubuntu

Configurazione di PHP-FPM per l'ascolto su un socket di dominio UNIX

Per configurare PHP-FPM per ascoltare su un socket di dominio UNIX, apri il tuo PHP-FPM predefinito file di configurazione del pool, utilizzando il tuo editor di testo preferito.

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

Quindi cerca la direttiva listen e impostala sul percorso del file del socket di dominio UNIX come segue. Nota che la maggior parte delle installazioni utilizza un socket di dominio UNIX per impostazione predefinita.

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

Se utilizzi un socket di dominio UNIX, devi anche impostare i permessi di lettura/scrittura appropriati per il file, per consentire le connessioni dal server web NGINX. Per impostazione predefinita, NGINX viene eseguito come utente e gruppo nginx su CentOS/RHEL/Fedora e www-data su Ubuntu e Debian .

Quindi, trova il listen.owner e listen.group parametri e impostarli di conseguenza. Inoltre, imposta la modalità su 0660 usando il listen.mode parametro.

------------- 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

Tieni presente che se le autorizzazioni sul file socket del dominio UNIX non sono impostate correttamente, NGINX potrebbe restituire un errore di gateway errato.

Configurazione PHP-FPM

Configurazione di PHP-FPM per l'ascolto su un socket TCP/IP

Sebbene un socket di dominio UNIX sia più veloce di un socket TCP/IP, il primo è meno scalabile, poiché può supportare solo la comunicazione tra processi sullo stesso sistema operativo. Se NGINX e il server delle applicazioni back-end (PHP-FPM ) sono in esecuzione su sistemi diversi, dovrai configurare PHP-FPM per ascoltare su un socket TCP/IP per le connessioni.

Nel PHP-FPM file di configurazione del pool, imposta listen indirizzo come segue. Assicurati che la porta che hai scelto non sia utilizzata da un altro processo o servizio sullo stesso sistema.

listen = 127.0.0.1:3000

Configurazione PHP-FPM per socket TCP

Configurazione di NGINX per funzionare con il server delle applicazioni PHP-FPM

Dopo aver configurato l'indirizzo PHP-FPM ascolta, devi configurare NGINX per inoltrare una richiesta tramite quell'indirizzo, utilizzando il fastcgi_pass parametro di configurazione, in un file di configurazione del blocco del server virtuale.

Ad esempio, se il file di configurazione per il tuo sito web è /etc/nginx/conf.d/example.com.conf , aprilo per la modifica.

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

Cerca la location blocco per l'elaborazione di .php file e imposta il fastcgi_pass parametro come segue, se hai configurato PHP-FPM per l'ascolto su un socket di dominio UNIX.

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

Connetti Nginx a PHP-FPM usando Unix Socket

Oppure usa un TCP/IP indirizzo se hai configurato PHP-FPM per ascoltare su un TCP/IP PRESA. Se il server delle applicazioni back-end (PHP-FPM ) è in esecuzione su un server separato (sostituisci 10.42.0.10 con l'indirizzo IP della macchina su cui è in esecuzione il server PHP-FPM FastCGI).

fastcgi_pass  10.42.0.10:3000;

Connetti Nginx a PHP-FPM usando TCP Socket

Importante :su CentOS 8 , PHP-FPM è definito come un server upstream in /etc/nginx/conf.d/php-fpm.conf file, all'interno di un blocco a monte, con il nome php-fpm .

Qui puoi apportare modifiche di conseguenza a seconda dell'indirizzo PHP-FPM è configurato per l'ascolto, nel file di configurazione del pool. La configurazione predefinita punta a un socket di dominio UNIX.

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

Configura PHP Upstream Server in Nginx

e nel file di blocco del server del tuo sito, imposta semplicemente il fastcgi_pass parametro come mostrato.

fastcgi_pass php-fpm;

Configura Nginx su PHP-FPM Upstream Server

Dopo aver apportato modifiche a PHP-FPM e NGINX configurazioni, verificare la correttezza della loro sintassi di configurazione come segue.

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

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

Mentre l'output del comando mostra solo il file di configurazione principale, anche tutti gli altri file di configurazione sono inclusi e controllati.

Controlla la configurazione di Nginx e PHP-FPM

Successivamente, è necessario riavviare i due servizi per applicare le modifiche, utilizzando il comando systemctl.

------------- 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

Se ricevi errori, puoi controllare NGINX e PHP-FPM log utilizzando il comando cat.

------------- 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

Questo è tutto ciò che avevamo per te. La sezione commenti qui sotto può essere utilizzata per porre domande. Per ulteriori informazioni, vedere la documentazione NGINX e la documentazione PHP-FPM.

Condividere è prendersi cura...
Condividi su FacebookCondividi su TwitterCondividi su LinkedinCondividi su Reddit
Ubuntu
  1. Come installare WordPress usando Nginx su Ubuntu 18.04

  2. Come reindirizzare gli URL utilizzando Nginx

  3. Ssh:come connettersi a un PC tramite un altro PC utilizzando Ssh?

  4. Come abilitare Nginx con PHP-FPM su Plesk

  5. Unix socket vs host TCP/IP:porta

Come cambiare l'ascolto PHP-FPM su socket Unix

Come installare Nginx con PHP-FPM su Debian 11

Come connettere NGINX a PHP-FPM usando UNIX o TCP/IP Socket

Come installare WordPress usando Nginx in Ubuntu Linux

Come configurare PHP-FPM con NGINX

Come connettersi a MySQL usando PHP