Zum Inhalt springen

Jetzt PHP-FPM Dienst installieren und in NGINX einbinden 2020

Nachdem wir unseren NGINX Webserver installiert haben, sollten wir PHP-FPM Dienst installieren und in NGINX einbinden 2020. Im Gegensatz zu Apache bietet NGINX keine integrierte Unterstützung für die Verarbeitung von PHP-Dateien. Daher müssen wir den PHP-FPM-Dienst („fastCGI process manager“) verwenden, um die PHP-Dateien zu verarbeiten. Um die nächsten Schritte auszuführen, benötigen wir ein Nicht-Root-Benutzerkonto mit Sudo-Berechtigungen, welchen wir bereits in unseren Beitrag Debian 10 Buster installieren, eingerichtet haben.

sudo apt install php php-fpm

Mit diesem Befehl wird unter Debian 10 Buster die Version 7.3 von php installiert und den für NGINX benötigten PHP-FPM-Dienst. Weitere PHP-Erweiterungen können bei Bedarf installiert werden. Alternativ installieren wir die gängigsten PHP-Erweiterungen, die für grundlegende Anwendungen erforderlich sind.

sudo apt install php-common php-cli php-json php-mysql php-curl php-intl php-pear php-gd php-zip php-xml php-mbstring php-pdo php-opcache

Nun haben wir die Aufgabe PHP-FPM Dienst installieren bereits erledigt und müssen nun diesen Dienst nur noch in NGINX einbinden.

PHP-FPM Dienst in NGINX einbinden

Nun können wir den PHP-FPM Dienst in NGINX einbinden. Dazu öffnen wir die Konfiguration Datei von unserem letzten Virtual Host, den wir in unseren Beitrag NGINX Webserver installieren, angelegt haben.

sudo nano /etc/nginx/sites-availables/example.info.conf

Damit der PHP-FPM Dienst von NGINX angesprochen werden kann, müssen wir die rot markierten Textzeilen in unsere Konfiguration Datei hinzufügen.

server {
        listen 80;
        listen [::]:80;

        server_name example.info;

        root /var/www/example.info;
        index index.html index.php;

        location / {
                try_files $uri $uri/ =404;
        }
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        }
       }

Als erstes werden wir den PHP-FPM Dienst starten. Damit die Änderungen in NGINX aktiv werden müssen wir auch den NGINX Webserver neustarten.

sudo systemctl start php7.3-fpm
sudo systemctl restart nginx

Nachdem wir den NGINX Webserver neu gestartet haben, haben wir unsere Aufgabe PHP-FPM Dienst installieren und in NGINX einbinden hoffentlich richtig ausgeführt. Um dies zu testen, können wir die php version mit folgendem Befehl in der Konsole überprüfen.

sudo php -v

Output
PHP 7.3.14-1~deb10u1 (cli) (built: Feb 16 2020 15:07:23) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.14, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.14-1~deb10u1, Copyright (c) 1999-2018, by Zend Technologies

Um zu prüfen, ob der PHP-FPM Dienst entsprechend vom NGINX Webserver richtig angesprochen wird, können wir ein kleines PHP Programm in unsere Webseiten Verzeichnis /var/www/example.info einfügen. Dazu erstellen wir eine neue php Datei mit dem nano Editor.

sudo nano /var/www/example.info/info.php

Am besten wir fügen nun folgende Zeilen in den nano Editor ein.

<?php

phpinfo();

?>

PHP-FPM Dienst installieren – Im Browser prüfen

Wenn wir diese php Datei gespeichert haben, können wir in dem Browser die info.php Datei aufrufen.

http://ip-adresse/info.php

Die phpinfo-Funktion zeigt uns die PHP-Konfiguration wie in der Abbildung unten. Somit haben wir unsere Aufgabe PHP-FPM Dienst installieren und in NGINX einbinden erfolgreich durchgeführt.

PHP-FPM Dienst installieren und in NGINX einbinden

Post Größe eines HTML Formulars vergrößern

Wenn wir die Post Größe eines HTML Formulars vergrößern möchten, ist dies direkt in der NGINX Konfiguration möglich. Dies können wir mit der Variable client_max_body_size realisieren, der im Abschnitt server { } eingefügt werden sollte. Standardmäßig ist es 1 MB, aber es kann wie in unserem Beispiel auf 30 MB gesetzt werden und die Puffergröße mit der folgenden Konfiguration erhöht werden.

server {
        ...

        client_max_body_size 30m;

        ...
}

PHP-Einstellungen über php.ini ändern

Wenn wir andere Variablen aus der php.ini ändern möchten, können wir einerseits diese Datei direkt editieren. Aber das sollten wir am besten vermeiden, da wir auch Virtuale Hosts auf unserem Server eingesetzt haben. Auch wenn wir nur eine Domain auf dem Server betreiben, sollten wir die Änderung über den Pool von PHP-FPM Dienst durchführen lassen. Denn wir können für jede NGINX Konfiguration eine eigene Pool-Instanz mit jeweils einer eigenen UID / GID ausführen lassen. Als Erstes werden wir die bestehende PHP-FPM Pool Instanz editieren.

sudo nano /etc/php/7.3/fpm/pool.d/www.conf

Da wir keine Änderung an der Konfiguration durchführen wollen, können wir gleich zum Ende dieser Datei springen. Dort finden wir schon einige Beispiel mit php_admin_value, php_flag und php_admin_flag die durch ein Semikolon aus kommentiert wurden. Um jetzt die Variablen upload_max_filesize, sowie post_max_size zu ändern, werden wir die zwei untenstehenden Zeilen hinzufügen.

php_admin_value[upload_max_filesize] = 36M
php_admin_value[post_max_size] = 16M

Wenn wir die Datei www.conf gespeichert haben, müssen wir nur noch den PHP-FPM Dienst neu starten.

sudo systemctl restart php7.3-fpm

Anschließend sollten wir die PHP Konfiguration in unserem Browser überprüfen, ob die Werte bei den Variablen upload_max_filesize, sowie post_max_size entsprechend gesetzt wurden.

http://ip-adresse/info.php

PHP-FPM mehre Pools erstellen

Wie bereits zu Beginn erwähnt, können wir mehre Pools erstellen, um so separate PHP Konfigurationen für unsere Virtuale Hosts zu erstellen. Dazu werden wir uns als Nächstes eine Kopie der www.conf im Verzeichnis /etc/php/7.3/fpm/pool.d erstellen.

sudo cp /etc/php/7.3/fpm/pool.d/www.conf /etc/php/7.3/fpm/pool.d/sub.conf

Nun werden wir uns eine Pool-Instanz für unsere Subdomains erstellen und müssen nun die Kopie sub.conf entsprechend editieren. Natürlich kann der Name frei gewählt werden, muss aber die Endung .conf haben. Denn nach einem Restart des PHP-FPM Dienstes durchsucht der PHP FastCGI Process Manager das Verzeichnis „/etc/php/7.3/fpm/pool.d“ nach zu erstellenden Sockets. 

sudo nano /etc/php/7.3/fpm/pool.d/sub.conf

Hier müssen wir nun gleich am Anfang den Namen des Pools von [www] in [sub] ändern. Des weiteren müssen wir den Socket einen Namen geben, welches wir bei listen = /run/php/php7.3-fpm.sock finden und in /run/php/php7.3-fpm-sub.sock ändern. Die entsprechenden Zeilen sind rot markiert.

; Start a new pool named 'www'.
; the variable $pool can be used in any directive and will be replaced by the
; pool name ('www' here)
[sub]

; Per pool prefix
; It only applies on the following directives:
; - 'access.log'
; - 'slowlog'
; - 'listen' (unixsocket)
; - 'chroot'
; - 'chdir'
; - 'php_values'
; - 'php_admin_values'
; When not set, the global prefix (or /usr) applies instead.
; Note: This directive can also be relative to the global prefix.
; Default Value: none
;prefix = /path/to/pools/$pool

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = www-data
group = www-data

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /run/php/php7.3-fpm-sub.sock

...

Damit die neue Pool-Instanz zu Verfügung gestellt wird, müssen wir den PHP-FPM Dienst neu starten.

sudo systemctl restart php7.3-fpm

Nun werden wir noch eben die neue PHP FPM Pool Instanz in unsere NGINX Konfiguartion einfügen. Dazu öffnen wir eine Konfiguration Datei eines Virtualen Host oder aber die default Datei, welche sich im Verzeichnis /etc/nginx/sites-available befinden sollte.

cd /etc/nginx/sites-availables
sudo nano default

Diese Datei werden wir um einige Zeilen ergänzen, welche unten im Beispiel rot markiert sind.

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name _;
        location / {
                try_files $uri $uri/ =404;
        }
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.3-fpm-sub.sock;
        }
}

Zum Abschluss müssen wir nun nur noch den NGINX Webserver neu starten und wir haben unsere Subdomains mit einem eigenen PHP-FPM Prozess ausgestattet.

sudo systemctl restart nginx

Auch in der PHP-FPM Pool Instanz für unsere Subdomains können wir, wie bereits oben beschrieben, Anpassungen mit den einträgen php_admin_value, php_flag und php_admin_flag machen, um die Werte in der php.ini zu bearbeiten.

Nun haben wir das Grundgerüst, bestehend aus NGINX Webserver und PHP-FPM Dienst für unseren eigenen Webseiten eingerichtet.

Ein Gedanke zu „Jetzt PHP-FPM Dienst installieren und in NGINX einbinden 2020“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.