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