PHP-FPM-Pools – Verwendung für mehrerer Websites

PHP-FPM-Pools

Einführung

Da die Serverhardware immer schneller und effizienter wird, ist es nicht mehr ungewöhnlich, mehrere Websites auf einem Nginx-Webserver zu hosten. Für eine bessere Leistung, Prozessisolierung und Sicherheit sollten Sie separate PHP FastCGI Process Manager (PHP-FPM) Pools für jede Website verwenden. Dieser Artikel beschreibt die Grundlagen der Verwendung separater PHP-FPM-Pools für mehrere Websites auf Nginx mit PHP 8.1 unter Verwendung einer Vultr Ubuntu 20.04 LTS Cloud Server-Instanz. Damit können Sie mehrere virtuelle Domains mit Nginx-Serverblöcken hosten.
Voraussetzungen

Fügen Sie einen nicht-root sudo-Benutzer hinzu.

Befolgen Sie die Best Practices zur Aktualisierung von Ubuntu.

Installieren Sie einen LEMP-Stack auf Ubuntu 22.04 LTS.

Erstellen Sie zwei DNS-"A"-Einträge, die auf dieselbe IP-Adresse Ihres LEMP-Servers verweisen, mit unterschiedlichen Namen. In diesem Beispiel werden subdomain1.example.com und subdomain2.example.com verwendet, die auf die gleiche IP-Adresse des Servers verweisen.

Entfernen Sie die Standard-Site

Nginx installiert eine Standard-Site, die für diesen Artikel überflüssig ist. Um die Standard-Site zu entfernen, loggen Sie sich als Nicht-Root-Benutzer mit sudo in den Server ein und führen Sie aus:

$ sudo rm /etc/nginx/sites-enabled/default

Erstellen Sie die Site-Benutzer

Jede Site muss aus Sicherheitsgründen und zur Isolierung unter einem anderen Benutzer laufen. Legen Sie dazu zwei Benutzerkonten an und weisen Sie den www-data-Benutzer den jeweiligen Gruppen zu. So kann der Webserver mit den Benutzern interagieren und umgekehrt. Geben Sie den Benutzern von subdomain1 und subdomain2 keine Anmeldeberechtigungen und ordnen Sie den Konten keine anderen Informationen zu. Um die Benutzer zu erstellen, führen Sie aus:

$ sudo useradd subdomain1

$ sudo useradd subdomain2

$ usermod -a -G subdomain1 www-data

$ usermod -a -G subdomain2 www-data

Verzeichnisberechtigungen zuweisen

Erstellen Sie zwei Verzeichnisse und legen Sie die Berechtigungen fest, um den Server für die beiden getrennten Sites vorzubereiten.

$ sudo mkdir /var/www/subdomain1

$ sudo chown -R subdomain1:subdomain1 /var/www/subdomain1

$ sudo mkdir /var/www/subdomain2

$ sudo chown -R subdomain2:subdomain2 /var/www/subdomain2

$ sudo chmod 770 /var/www/subdomain2

Die Unix-Berechtigungen lauten 770. Jeder Benutzer und die ihm zugeordnete Gruppe hat volle Rechte (7) für das Verzeichnis, aber die Welt hat keine (0) Rechte. Mit dieser Einstellung kann der Benutzer von subdomain1 die Daten von subdomain2 nicht sehen und andersherum.

Neue PHP-FPM-Pools erstellen

Kopieren Sie den Standard-PHP-FPM-Pool als Vorlage für die beiden neuen Benutzerpools:

$ sudo cp /etc/php/8.1/fpm/pool.d/www.conf /etc/php/8.1/fpm/pool.d/fpm-subdomain1.conf

$ sudo cp /etc/php/8.1/fpm/pool.d/www.conf /etc/php/8.1/fpm/pool.d/fpm-subdomain2.conf

Löschen Sie den nicht mehr benötigten Standardpool.

$ sudo rm /etc/php/8.1/fpm/pool.d/www.conf

Konfigurieren Sie den ersten Pool

Jeder Pool hat einen zugehörigen Benutzer und Unix-Socket. Bearbeiten Sie die erste Konfigurationsdatei:

$ sudo nano /etc/php/8.1/fpm/pool.d/fpm-subdomain1.conf

Ändern Sie vier Zeilen:

Ändern Sie die oberste Zeile innerhalb der Klammern, die den Poolnamen von [www] auf [subdomain1] setzt.

Ändern Sie die Zeile user = www-data in user = subdomain1.

Ändern Sie die Zeile group = www-data in group = subdomain1.

Ändern Sie die Zeile listen = /var/run/php/php8.1-fpm.sock in listen = /var/run/php/php8.1-subdomain1-fpm.sock.

Speichern Sie die Datei und beenden Sie sie.

Konfigurieren Sie den zweiten Pool

Bearbeiten Sie die zweite Konfigurationsdatei:

$ sudo nano /etc/php/8.1/fpm/pool.d/fpm-subdomain2.conf

Ändern Sie vier Zeilen:

Ändern Sie die oberste Zeile innerhalb der Klammern, die den Poolnamen von [www] auf [subdomain2] setzt.

Ändern Sie die Zeile user = www-data in user = subdomain2.

Ändern Sie die Zeile group = www-data in group = subdomain2.

Ändern Sie die Zeile listen = /var/run/php/php8.1-fpm.sock in listen = /var/run/php/php8.1-subdomain2-fpm.sock.

Speichern Sie die Datei und beenden Sie sie.

PHP-FPM neu starten

Starten Sie den PHP-FPM-Daemon neu.

$ sudo service php8.1-fpm restart

Der Daemon sollte ohne Fehler neu starten. Überprüfen Sie, ob zwei separate PHP-FPM-Pools laufen.

$ sudo dienst php8.1-fpm status

Wenn die FPM-Service-Pools korrekt sind, werden sie in der Prozessliste sichtbar:

      CGroup: /system.slice/php8.1-fpm.service
      php-fpm: Hauptprozess (/etc/php/8.1/fpm/php-fpm.conf)

      php-fpm: Verzeichnis subdomain1

      php-fpm: Verzeichnis subdomain1

      php-fpm: Verzeichnis subdomain2

      php-fpm: pool subdomain2

Erstellen Sie die Nginx-Sites

Der Server benötigt zwei neue Sites, um die beiden PHP-FPM-Pools zu verwenden, und zwar jeweils eine, die mit dem jeweiligen Pool verbunden ist.

Erstellen Sie eine Konfigurationsdatei für subdomain1:

sudo nano /etc/nginx/sites-available/subdomain1

Fügen Sie das Folgende in die Datei ein:


server {

    server_name subdomain1.example.com;

    access_log /var/log/nginx/subdomain1.access.log;

    error_log /var/log/nginx/subdomain1.error.log;


    root /var/www/subdomain1;

    index index.php;


    try_files $uri $uri/ /index.php?$query_string;


    location ~ \.php$ {

            fastcgi_pass unix:/var/run/php/php8.1-fpm-subdomain1.sock;

            include snippets/fastcgi-php.conf;

    }

}

Speichern und beenden Sie die Datei. Die wichtigsten Änderungen oben sind:

server_name – der vollständig qualifizierte DNS-Name des Hosts

access_log – Speicherort und Name des Zugriffsprotokolls

error_log – Speicherort und Name des Fehlerprotokolls

root – der Speicherort der Dateien auf der Festplatte, die der Webserver verwendet

fastcgi_pass – der Speicherort des vom Pool erstellten PHP-FPM-Socks

Erstellen Sie eine Datei für Subdomain2.

$ sudo nano /etc/nginx/sites-available/subdomain2

Der Inhalt dieser Datei entspricht dem von subdomain1, nur dass sie die Informationen für subdomain2 enthält:

server {

    server_name subdomain2.example.com;

    access_log /var/log/nginx/subdomain2.access.log;

    error_log /var/log/nginx/subdomain2.error.log;

    root /var/www/subdomain2;

    index index.php;

    try_files $uri $uri/ /index.php?$query_string;



    location ~ \.php$ {

            fastcgi_pass unix:/var/run/php/php8.1-fpm-subdomain2.sock;

            include snippets/fastcgi-php.conf;

    }

}

Speichern und beenden Sie die Datei.

Verknüpfen Sie die Dateien mit den jeweiligen Nginx-Verzeichnissen und starten Sie nginx neu:

$ sudo ln -s /etc/nginx/sites-available/subdomain1 /etc/nginx/sites-enabled/subdomain1

$ sudo ln -s /etc/nginx/sites-available/subdomain2 /etc/nginx/sites-enabled/subdomain2

$ sudo service nginx restart

Dies sollte ohne Fehler starten.

Testen Sie die Konfiguration

Fügen Sie eine Testdatei im Stammverzeichnis jeder Website hinzu, um die Konfiguration zu testen und zu überprüfen, welcher Benutzer die einzelnen Websites bedient.

Erstellen Sie eine Indexdatei für subdomain1.

$ nano /var/www/subdomain1/index.php

Fügen Sie das Folgende in die Datei ein:

<?php

phpinfo();

Speichern und beenden Sie die Datei.

Erstellen Sie eine Indexdatei für die Subdomain2.

$ nano /var/www/subdomain2/index.php

Fügen Sie das Folgende in die Datei für die Subdomain2 ein:

<?php

phpinfo();

Speichern und beenden Sie die Datei.

Öffnen Sie einen Browser und besuchen Sie http://subdomain1.example.com und http://subdomain2.example.com.

Sehen Sie sich die PHP-Informationsseite für jede Site an. Im Abschnitt PHP-Variablen sollte die Variable $_SERVER['USER'] für subdomain1.example.com auf subdomain1 und für subdomain2.example.com auf subdomain2 stehen.

Zusammenfassung

Das Anlegen separater PHP-FPM-Pools für jede Website, die auf einem einzigen Server betrieben wird, bietet dem Administrator mehr Sicherheit, klarere Grenzen und erleichtert die Fehlerbehebung bei Problemen mit einzelnen Websites. Es ist auch möglich, die Einstellungen für die Leistung der einzelnen Websites individuell zu optimieren. Diese Einstellungen befinden sich in den Konfigurationsdateien /etc/php/8.1/fpm/pool.d. Die wichtigste Einstellung, die häufig geändert wird, ist die pm-Einstellung, die die Prozesserstellung steuert, mit Einstellungen wie dynamisch, statisch oder ondemand. Weitere Informationen finden Sie in der FastCGI-Prozessmanager-Konfiguration.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert