GNU/Linux >> Linux Esercitazione >  >> Linux

Come configurare PHP-FPM con NGINX

PHP-FPM (FastCGI Process Manager) è un'alternativa all'implementazione FastCGI di PHP con alcune funzionalità aggiuntive utili per i siti ad alto traffico. È il metodo preferito per elaborare le pagine PHP con NGINX ed è più veloce dei tradizionali metodi basati su CGI come SUPHP o mod_php per eseguire uno script PHP.

Il vantaggio principale dell'utilizzo di PHP-FPM è che utilizza una quantità considerevole di meno memoria e CPU rispetto a qualsiasi altro metodo di esecuzione di PHP. Il motivo principale è che demonizza PHP, trasformandolo così in un processo in background mentre fornisce uno script CLI per la gestione delle richieste PHP.

Prerequisiti di configurazione PHP-FPM NGINX

  • Puoi aprire una sessione SSH sul tuo sistema Ubuntu 18.04 usando root o un utente abilitato sudo.
  • Hai già installato NGINX e PHP nel tuo sistema Ubuntu 18.04.

Passaggi di configurazione NGINX PHP-FPM

  • Installa PHP-FPM
  • Configura pool PHP-FPM
  • Configura NGINX per PHP-FPM
  • Test della configurazione PHP-FPM di NGINX

1. Installa PHP-FPM

Nginx non sa come eseguire un proprio script PHP. Ha bisogno di un modulo PHP come PHP-FPM per gestire in modo efficiente gli script PHP. PHP-FPM, d'altra parte, viene eseguito al di fuori dell'ambiente NGINX creando il proprio processo. Pertanto, quando un utente richiede una pagina PHP, il server nginx passerà la richiesta al servizio PHP-FPM utilizzando FastCGI.

L'installazione di php-fpm in Ubuntu 18.04 dipende da PHP e dalla sua versione. Controlla la documentazione di PHP installato prima di procedere con l'installazione di FPM nel tuo server. Supponendo che tu abbia già installato l'ultimo PHP 7.3, puoi installare FPM usando il seguente comando apt-get.


# apt-get install php7.3-fpm

Il servizio FPM si avvierà automaticamente al termine dell'installazione. Puoi verificarlo usando il seguente comando systemd:


# systemctl status php7.3-fpm
● php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-02-17 06:29:31 UTC; 30s ago
     Docs: man:php-fpm7.3(8)
 Main PID: 32210 (php-fpm7.3)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
    Tasks: 3 (limit: 1152)
   CGroup: /system.slice/php7.3-fpm.service
           ├─32210 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
           ├─32235 php-fpm: pool www
           └─32236 php-fpm: pool www

2. Configura il pool PHP-FPM

Il servizio php-fpm crea un pool predefinito, la cui configurazione (www.conf) può essere trovata in /etc/php/7.3/fpm/pool.d cartella. È possibile personalizzare il pool predefinito in base alle proprie esigenze. Ma è una pratica standard creare pool separati per avere un migliore controllo sull'allocazione delle risorse a ciascun processo FPM.

Inoltre, la separazione del pool FPM consentirà loro di funzionare in modo indipendente creando il proprio processo master. Ciò significa che ogni applicazione php può essere configurata con le proprie impostazioni della cache utilizzando PHP-FPM. Una modifica alla configurazione di un pool non richiede l'avvio o l'arresto del resto dei pool FPM.

Creiamo un pool FPM per eseguire efficacemente un'applicazione PHP tramite un utente separato. Per cominciare, crea un nuovo utente che avrà diritti esclusivi su questo pool:


# groupadd wordpress_user
# useradd -g wordpress_user wordpress_user

Ora vai alla directory di configurazione di FPM e crea un file di configurazione usando il tuo editor di testo preferito come vi:


# cd /etc/php/7.3/fpm/pool.d
# vi wordpress_pool.conf
[wordpress_site]
user = wordpress_user
group = wordpress_user
listen = /var/run/php7.2-fpm-wordpress-site.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
; Choose how the process manager will control the number of child processes. 
pm = dynamic 
pm.max_children = 75 
pm.start_servers = 10 
pm.min_spare_servers = 5 
pm.max_spare_servers = 20 
pm.process_idle_timeout = 10s

Le opzioni di configurazione FPM precedenti e i relativi valori sono descritti di seguito.

  • [sito_wordpress] :il nome del pool e deve essere univoco in tutti i nomi di pool.
  • utente e gruppo :l'utente e il gruppo in cui verrà eseguito il pool.
  • ascolta :il nome del file socket per questo pool.
  • ascolta.proprietario e ascolta.gruppo :deve corrispondere all'utente e al gruppo su cui è in esecuzione NGINX. Nel nostro caso si tratta di www-data.
  • php_admin_value :consente di impostare valori di configurazione php personalizzati.
  • php_admin_flag :Permette di impostare flag booleani PHP.
  • pm :le impostazioni di gestione dei processi e il valore è Dinamico significa che il numero di processi secondari è impostato dinamicamente in base alle seguenti direttive.
  • pm.max_children :il numero massimo di bambini che possono essere vivi contemporaneamente.
  • pm.start_servers :il numero di bambini creati all'avvio.
  • pm.min_spare_servers :il numero minimo di bambini in stato di "inattività" (in attesa di elaborazione). Se il numero di processi inattivi è inferiore a questo numero, verranno creati dei figli.
  • pm.max_spare_servers :il numero massimo di bambini in stato di inattività (in attesa di elaborazione). Se il numero di processi inattivi è maggiore di questo numero, alcuni bambini verranno uccisi.
  • pm.process_idle_timeout :il numero massimo desiderato di processi server inattivi. Utilizzato solo quando il valore pm è impostato su dinamico.
  • Oltre alle impostazioni di cui sopra, è anche possibile passare alcune variabili ambientali di sistema al servizio php-fpm usando qualcosa come env['PHP_FOO'] = $bar .

    Ad esempio, l'aggiunta delle seguenti opzioni nel file di configurazione precedente imposterà il nome host e la posizione della cartella temporanea nell'ambiente PHP.

    
    ...
    ...
    env[HOSTNAME] = $HOSTNAME
    env[TMP] = /tmp
    ...
    ...
    

    Inoltre, le impostazioni dei gestori di processo nel file di configurazione del pool sopra sono impostate su dinamiche. Scegli l'impostazione più adatta alle tue esigenze.

    Le altre opzioni di configurazione per il gestore dei processi sono:

  • Statico :Verrà mantenuto un numero fisso di processi PHP.
  • a richiesta :Nessun figlio viene creato all'avvio. I bambini verranno biforcati quando verranno ricevute nuove richieste nel server.

Una volta terminata la creazione del file di configurazione sopra, riavvia il servizio fpm per applicare le nuove impostazioni:


# systemctl start php7.3-fpm

Il pool FPM verrà creato immediatamente per servire le pagine php. Ricorda, puoi creare un servizio systemd separato specificando il file di configurazione FPM sopra, consentendoti così di avviare/arrestare questo pool senza influenzare altri pool.

3. Configura NGINX per PHP-FPM

Ora crea un blocco server NGINX che utilizzerà il pool FPM di cui sopra. Per farlo, modifica il tuo file di configurazione NGINX e passa il percorso del file socket del pool usando l'opzione fastcgi_pass all'interno del blocco di posizione per php.


server {
         listen       80;
         server_name  example.journaldev.com;
         root         /var/www/html/wordpress;

         access_log /var/log/nginx/example.journaldev.com-access.log;
         error_log  /var/log/nginx/example.journaldev.com-error.log error;
         index index.html index.htm index.php;

         location / {
                      try_files $uri $uri/ /index.php$is_args$args;
         }

         location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php7.2-fpm-wordpress-site.sock;
            fastcgi_index index.php;
            include fastcgi.conf;
    }
}

Blocco server NGINX

Assicurati che l'impostazione di configurazione sopra sia sintatticamente corretta e riavvia NGINX.


# nginx-t
# systemctl restart nginx

4. Testare la configurazione NGINX PHP-FPM

Per verificare se il file di configurazione NGINX sopra sta effettivamente utilizzando il pool FPM appena creato, creare un file di informazioni php all'interno della radice web. Ho usato /var/www/html/wordpress come web root nel file di configurazione NGINX sopra. Regola questo valore in base al tuo ambiente.


# cd /var/www/html/wordpress
# echo "<?php echo phpinfo();?>" > info.php

Una volta che hai finito di creare la pagina delle informazioni PHP, punta ad essa il tuo browser web preferito.

Noterai che il valore di $_SERVER['USER'] e $_SERVER['HOME'] le variabili puntano a wordpress_user e /home/wordpress_user rispettivamente che abbiamo impostato in precedenza nel file di configurazione FPM e quindi conferma che NGINX sta servendo le pagine php usando il nostro pool FPM desiderato.

Test NGINX PHP-FPM

Riepilogo

In questo articolo, abbiamo imparato come installare php-fpm e configurare pool separati per utenti e applicazioni diversi. Abbiamo anche imparato come configurare un blocco server NGINX per la connessione a un servizio PHP-FPM. PHP-FPM offre affidabilità, sicurezza, scalabilità e velocità insieme a molte opzioni di ottimizzazione delle prestazioni. È ora possibile suddividere il pool PHP-FPM predefinito in più pool di risorse per servire applicazioni diverse. Ciò non solo migliorerà la sicurezza del tuo server, ma ti consentirà anche di allocare le risorse del server in modo ottimale!


Linux
  1. Come configurare Nginx per funzionare con PHP tramite PHP-FPM

  2. Come configurare l'SSL Cloudflare di origine con Nginx

  3. Come configurare i server di log remoti con rsyslog?

  4. Come eseguire più versioni di PHP con Nginx su Ubuntu?

  5. Come installare PHP-FPM con Apache su Ubuntu 20.04

Come installare WonderCMS su Ubuntu 20.04 (con Nginx)

Come configurare Nginx con SSL

Come installare Nginx con PHP-FPM su Debian 11

Come configurare NGINX su un server CentOS 7

Come configurare il bilanciamento del carico con NGINX su Jelastic Cloud

Come installare e configurare Memcached con Apache e PHP