GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So konfigurieren Sie PHP-FPM mit NGINX

PHP-FPM (FastCGI Process Manager) ist eine Alternative zur FastCGI-Implementierung von PHP mit einigen zusätzlichen Funktionen, die für Websites mit hohem Datenverkehr nützlich sind. Es ist die bevorzugte Methode zur Verarbeitung von PHP-Seiten mit NGINX und schneller als herkömmliche CGI-basierte Methoden wie SUPHP oder mod_php zum Ausführen eines PHP-Skripts.

Der Hauptvorteil der Verwendung von PHP-FPM besteht darin, dass es im Vergleich zu anderen Methoden zum Ausführen von PHP erheblich weniger Speicher und CPU benötigt. Der Hauptgrund ist, dass es PHP dämonisiert und es dadurch in einen Hintergrundprozess umwandelt, während es ein CLI-Skript zum Verwalten von PHP-Anforderungen bereitstellt.

PHP-FPM NGINX-Konfigurationsvoraussetzungen

  • Sie können eine SSH-Sitzung zu Ihrem Ubuntu 18.04-System öffnen, indem Sie root oder einen sudo-aktivierten Benutzer verwenden.
  • Sie haben NGINX und PHP bereits in Ihrem Ubuntu 18.04-System installiert.

NGINX PHP-FPM-Konfigurationsschritte

  • Installieren Sie PHP-FPM
  • Konfigurieren Sie den PHP-FPM-Pool
  • NGINX für PHP-FPM konfigurieren
  • Testen Sie die NGINX PHP-FPM-Konfiguration

1. Installieren Sie PHP-FPM

Nginx weiß nicht, wie man ein eigenes PHP-Skript ausführt. Es benötigt ein PHP-Modul wie PHP-FPM, um PHP-Skripte effizient zu verwalten. PHP-FPM hingegen läuft außerhalb der NGINX-Umgebung, indem es einen eigenen Prozess erstellt. Wenn ein Benutzer eine PHP-Seite anfordert, leitet der Nginx-Server die Anforderung daher mithilfe von FastCGI an den PHP-FPM-Dienst weiter.

Die Installation von php-fpm in Ubuntu 18.04 hängt von PHP und seiner Version ab. Überprüfen Sie die Dokumentation des installierten PHP, bevor Sie mit der Installation von FPM auf Ihrem Server fortfahren. Angenommen, Sie haben bereits das neueste PHP 7.3 installiert, dann können Sie FPM mit dem folgenden apt-get-Befehl installieren.


# apt-get install php7.3-fpm

Der FPM-Dienst wird automatisch gestartet, sobald die Installation abgeschlossen ist. Sie können dies mit dem folgenden systemd-Befehl überprüfen:


# 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. PHP-FPM-Pool konfigurieren

Der Dienst php-fpm erstellt einen Standardpool, dessen Konfiguration (www.conf) in /etc/php/7.3/fpm/pool.d zu finden ist Mappe. Sie können den Standardpool gemäß Ihren Anforderungen anpassen. Es ist jedoch üblich, separate Pools zu erstellen, um eine bessere Kontrolle über die Ressourcenzuweisung für jeden FPM-Prozess zu haben.

Darüber hinaus ermöglicht die Trennung des FPM-Pools es ihnen, unabhängig zu laufen, indem sie ihren eigenen Masterprozess erstellen. Das bedeutet, dass jede PHP-Anwendung mit PHP-FPM mit ihren eigenen Cache-Einstellungen konfiguriert werden kann. Eine Änderung der Konfiguration eines Pools erfordert nicht, dass Sie die restlichen FPM-Pools starten oder stoppen.

Lassen Sie uns einen FPM-Pool erstellen, um eine PHP-Anwendung effektiv über einen separaten Benutzer auszuführen. Erstellen Sie zunächst einen neuen Benutzer, der über exklusive Rechte für diesen Pool verfügt:


# groupadd wordpress_user
# useradd -g wordpress_user wordpress_user

Navigieren Sie nun zum FPM-Konfigurationsverzeichnis und erstellen Sie eine Konfigurationsdatei mit Ihrem bevorzugten Texteditor wie 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

Die obigen FPM-Konfigurationsoptionen und ihre Werte werden unten beschrieben.

  • [wordpress_site] :Der Name des Pools und muss für alle Poolnamen eindeutig sein.
  • Benutzer und Gruppe :Der Benutzer und die Gruppe, unter denen der Pool ausgeführt wird.
  • hören :Der Name der Socket-Datei für diesen Pool.
  • listen.owner und listen.group :Muss mit dem Benutzer und der Gruppe übereinstimmen, auf denen NGINX ausgeführt wird. In unserem Fall sind es www-data.
  • php_admin_value :Ermöglicht das Festlegen benutzerdefinierter PHP-Konfigurationswerte.
  • php_admin_flag :Erlaubt das Setzen von booleschen PHP-Flags.
  • pm :Die Prozessmanagereinstellungen und der Wert Dynamisch bedeutet, dass die Anzahl der untergeordneten Prozesse basierend auf den folgenden Anweisungen dynamisch festgelegt wird.
  • pm.max_children :Die maximale Anzahl von Kindern, die gleichzeitig leben können.
  • pm.start_servers :Die Anzahl der Kinder, die beim Start erstellt wurden.
  • pm.min_spare_servers :Die Mindestanzahl von untergeordneten Elementen im „Leerlauf“-Zustand (warten auf Verarbeitung). Wenn die Anzahl der Leerlaufprozesse kleiner als diese Zahl ist, werden einige untergeordnete Prozesse erstellt.
  • pm.max_spare_servers :Die maximale Anzahl von untergeordneten Elementen im Ruhezustand (warten auf Verarbeitung). Wenn die Anzahl der untätigen Prozesse größer als diese Zahl ist, werden einige Kinder getötet.
  • pm.process_idle_timeout :Die gewünschte maximale Anzahl inaktiver Serverprozesse. Wird nur verwendet, wenn der pm-Wert auf dynamisch eingestellt ist.
  • Abgesehen von den obigen Einstellungen ist es auch möglich, einige Systemumgebungsvariablen an den php-fpm-Dienst zu übergeben, indem etwas wie env['PHP_FOO'] = $bar verwendet wird .

    Wenn Sie beispielsweise die folgenden Optionen in der obigen Konfigurationsdatei hinzufügen, werden der Hostname und der Speicherort des temporären Ordners auf die PHP-Umgebung festgelegt.

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

    Außerdem sind die Prozessmanagereinstellungen in der obigen Pool-Konfigurationsdatei auf dynamisch gesetzt. Wählen Sie eine Einstellung, die Ihren Anforderungen am besten entspricht.

    Die anderen Konfigurationsoptionen für den Prozessmanager sind:

  • Statisch :Eine feste Anzahl von PHP-Prozessen wird beibehalten.
  • auf Anfrage :Beim Start werden keine untergeordneten Elemente erstellt. Kinder werden geforkt, wenn neue Anfragen auf dem Server eingehen.

Wenn Sie mit der Erstellung der obigen Konfigurationsdatei fertig sind, starten Sie den fpm-Dienst neu, um die neuen Einstellungen zu übernehmen:


# systemctl start php7.3-fpm

Der FPM-Pool wird sofort erstellt, um PHP-Seiten bereitzustellen. Denken Sie daran, dass Sie einen separaten systemd-Dienst erstellen können, indem Sie die obige FPM-Konfigurationsdatei angeben, wodurch Sie diesen Pool starten/stoppen können, ohne andere Pools zu beeinträchtigen.

3. NGINX für PHP-FPM konfigurieren

Erstellen Sie nun einen NGINX-Serverblock, der den obigen FPM-Pool nutzt. Bearbeiten Sie dazu Ihre NGINX-Konfigurationsdatei und übergeben Sie den Pfad der Socket-Datei des Pools mit der Option fastcgi_pass innerhalb des Standortblocks für 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;
    }
}

NGINX-Serverblock

Stellen Sie sicher, dass die obige Konfigurationseinstellung syntaktisch korrekt ist, und starten Sie NGINX neu.


# nginx-t
# systemctl restart nginx

4. Testen Sie die PHP-FPM-NGINX-Konfiguration

Um zu testen, ob die obige NGINX-Konfigurationsdatei tatsächlich den neu erstellten FPM-Pool verwendet, erstellen Sie eine PHP-Infodatei im Webstammverzeichnis. Ich habe /var/www/html/wordpress verwendet als Web-Root in der obigen NGINX-Konfigurationsdatei. Passen Sie diesen Wert entsprechend Ihrer Umgebung an.


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

Wenn Sie mit der Erstellung der PHP-Infoseite fertig sind, zeigen Sie mit Ihrem bevorzugten Webbrowser darauf.

Sie werden feststellen, dass der Wert von $_SERVER['USER'] und $_SERVER['HOME'] Variable zeigen auf wordpress_user und /home/wordpress_user bzw. die wir zuvor in der FPM-Konfigurationsdatei festgelegt haben, und bestätigt damit, dass NGINX die PHP-Seiten mit unserem gewünschten FPM-Pool bedient.

NGINX PHP-FPM-Test

Zusammenfassung

In diesem Artikel haben wir gelernt, wie man php-fpm installiert und separate Pools für verschiedene Benutzer und Anwendungen konfiguriert. Wir haben auch gelernt, wie man einen NGINX-Serverblock konfiguriert, um eine Verbindung zu einem PHP-FPM-Dienst herzustellen. PHP-FPM bietet Zuverlässigkeit, Sicherheit, Skalierbarkeit und Geschwindigkeit sowie viele Optionen zur Leistungsoptimierung. Sie können jetzt den standardmäßigen PHP-FPM-Pool in mehrere Ressourcenpools aufteilen, um verschiedene Anwendungen zu bedienen. Dadurch wird nicht nur Ihre Serversicherheit erhöht, sondern Sie können auch Serverressourcen optimal zuweisen!


Linux
  1. So konfigurieren Sie Nginx für die Arbeit mit PHP über PHP-FPM

  2. Wie konfiguriere ich Remote-Protokollserver mit rsyslog?

  3. So installieren Sie PHP 7.4 mit Nginx unter Ubuntu 20.04

  4. Wie führe ich mehrere PHP-Versionen mit Nginx unter Ubuntu aus?

  5. So installieren Sie PHP-FPM mit Apache unter Ubuntu 20.04

So installieren Sie WonderCMS unter Ubuntu 20.04 (mit Nginx)

So konfigurieren Sie Nginx mit SSL

So installieren Sie Nginx mit PHP-FPM unter Debian 11

So konfigurieren Sie NGINX auf einem CentOS 7-Server

So konfigurieren Sie Load Balancing mit NGINX in Jelastic Cloud

So installieren und konfigurieren Sie Memcached mit Apache und PHP