Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:apache_http_server_archlinux_-_php74-fpm_-_alternativer_php-interpreter

Apache HTTP Server ArchLinux - php74-fpm - Alternativer PHP-Interpreter

Der Apache HTTP Server ist ein Open Source Webserver und der seit 1996 am meisten im Internet eingesetzte Webserver weltweit. Der freie und quell offenen Webserver wird von der Apache Software Foundation zur Verfügung gestellt und weiterentwickelt.

Um den Apache HTTP Server als Server mit PHP zu betreiben, kann zur Kommunikation FPM/FastCGI zum Einsatz kommen.

PHP-FPM startet gleich mehrere PHP-Interpreter-Prozesse, die ständig im Hintergrund laufen und auf Aufträge warten. Eingehende Anfragen nimmt PHP-FPM vom Webserver Apache HTTP Server entgegen und verteilt sie an die wartenden PHP-Interpreter.

Hierbei gibt es drei Möglichkeiten, die die Kommunikation zwischen dem Apache HTTP Server und dem PHP bewerkstelligen können:

  1. mod_php - Standard, Aufruf von PHP innerhalb des Webservers Apache HTTP Server.
  2. mod_fcgid - Nutzung von CGI/FastCGI durch Aufruf innerhalb des Apache HTTP Server durch starten eines externen Prozess durch den Apache HTTP Server
  3. php74-fpm - Nutzung von FPM/FastCGI durch Aufruf ausserhalb des Apache HTTP Server, über einen separat gestarteten Dienstes/Daemon.

Nachfolgend soll die Variante php74-fpm genutzt werden!

:!: WICHTIG - Nachfolgende Konfigurationen setzen die Einrichtung eines Apache HTTP Servers, wie unter nachfolgendem internen Link beschrieben, voraus:

Ab hier werden root-Rechte zur Ausführung der nachfolgenden Befehle benötigt. Um root zu werden geben Sie bitte folgenden Befehl ein:

$ su -
Password: 

Vorteile von PHP74-FPM

Nachfolgende Vorteile besitzt PHP74-FPM gegenüber den anderen Möglichkeiten, PHP-7 im Webserver einzubinden:

  1. PHP-7 Prozesse müssen nicht in der gleichen Umgebung, mit dem gleichen User- und der gleichen GruppenID, wie der Webserver laufen.
  2. Es ist möglich die PHP Prozesse neu zu starten, ohne ankommende „Requests“ zu verlieren.
  3. In der PHP74-FPM-Konfiguration kann man verschiedene Prozess Pools definieren. Für jeden Pool kann man definieren, mit welchen Rechten die Prozesse laufen, man kann die Prozesse sogar in ein Chroot einsperren oder sie mit einer anderen php.ini starten.
  4. Jeder Prozesspool lauscht auf einem eigenen Port oder einem Unix Domain Socket, so ist es möglich in einem Webserver zu Konfigurieren wohin die „Requests“ gestellt werden sollen.
  5. Es können PHP-7 Prozesse neu gestartet werden, ohne „Requests“ zu verlieren. Auch können PHP-7 Prozesse nach Zeit N automatisch terminiert werden.
  6. Ein Möglichkeit ist die Nutzung der Konfigurationsvariable request_slowlog_timeout. Braucht ein „Request“ länger als definiert, wird automatisch ein „Backtrace“ des „Requests“ in ein LOG-Datei geschrieben.
  7. PHP-FPM ist seit der PHP Version 5.3.3 fest in PHP integriert.
  8. Der Austausch der PHP-Version ist einfacher möglich, als dies bei der Nutzung von mod_php möglich wäre.
  9. Bessere Performance gegenüber z.B. mod_php
  10. :!: Der grösste Vorteile ist, die Nutzung des Apache HTTP Server im event-Modus, anstelle im prefork-Modus !!! :!:

Installation

Zur Installation des Apache HTTP Servers wird nachfolgendes Paket benötigt:

  • php74-fpm - ist im extra-Repository von ArchLinux enthalten.

Mit nachfolgendem Befehl, wird das Pakete php74-fpm installiert:

# pacman -S --noconfirm php74-fpm

Installationsverlauf

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket php74-fpm installiert wurden:

# pacman -Qil php74-fpm

Installierte Dateien

Dienst/Daemon-Start einrichten

Um den PHP74-FPM, welcher als Dienst/Daemon als Hintergrundprozess läuft, auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienst/Deamon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl realisiert werden kann:

# systemctl enable php74-fpm.service

:!: HINWEIS - Sollte keine Ausgabe nach Ausführung des Befehls erfolgen, wurde dieser mit der Installation bereits eingerichtet.

Eine Überprüfung, ob beim Neustart des Server der php74-fpm-Dienst/Daemon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:

# systemctl list-unit-files --type=service | grep -e php-fpm74.service
php74-fpm.service                           enabled         disabled

bzw.

# systemctl is-enabled php74-fpm.service
enabled

Konfiguration

Das Ansprechen von PHP über PHP74-FPM durch Apache HTTP Server php-fpm7 wird in nachfolgenden Konfigurationsdateien durchgeführt:

  • /etc/httpd/conf/httpd.conf - Einstellungen zum Laden der Module: mod_proxy und mod_proxy_fcgi und zum hinzufügen des Handlers für die Interpretation des PHP-Code.
  • /ect/php74/php-fpm.d/www.conf - Konfigurationsdatei für die Interpretationseinstellungen durch den Apache HTTP Server
  • /ect/php74/php-fpm.conf - Konfigurationsdatei für den PHP74-FPM Dienst/Daemon.

php-fpm-Konfiguration: /etc/httpd/conf/httpd.conf - Konfiguration

Bevor ein erneuter Neustart des Apache HTTP Server erfolgreich durchgeführt werden kann, ist es erforderlich für die nachfolgende Installation die Konfigurationsdatei /etc/httpd/conf/httpd.conf zu verändern.

Nachfolgende die Veränderung, welche vorgenommen werden muss:

(Nur relevanter Ausschnitt):

# Tachtler
# default: #LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_module modules/mod_proxy.so

Erklärungen:

  • LoadModule proxy_module modules/mod_proxy.so

Die Einbindung des Moduls mod_proxy ist erforderlich, da dieses ein einen Proxy/Gateway für den Apache HTTP Server implementiert. Es werden eine Reihe gängiger Protokolle sowie verschiedene Lastausgleichsalgorithmen unterstützt. Module von Drittanbietern können Unterstützung für zusätzliche Protokolle und Lastausgleichsalgorithmen hinzufügen.

# Tachtler
# default: #LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

Erklärungen:

  • LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

Die Einbindung des Moduls mod_proxy_fcgi ist erforderlich, um die Unterstützung für das FastCGI-Protokoll zu realisieren.
:!: WICHTIG - Dieses Modul benötigt den Dienst von mod_proxy.

Anschliessend sind nachfolgende Ergänzungen, hier an der Konfigurationsdatei

  • /etc/httpd/conf/httpd.conf

z.B. am Ende der Konfigurationsdatei durchzuführen:

(Nur relevanter Ausschnitt):

<IfModule proxy_module>
    <IfModule proxy_fcgi_module>
        <FilesMatch \.php$>
            SetHandler "proxy:unix:/run/php74-fpm/php-fpm.sock|fcgi://localhost/"
        </FilesMatch>
    </IfModule>
</IfModule>

Erklärungen:

  • <IfModule proxy_module>
        <IfModule proxy_fcgi_module>
            <FilesMatch \.php$>
                SetHandler "proxy:unix:/run/php74-fpm/php-fpm.sock|fcgi://localhost/"
            </FilesMatch>
        </IfModule>
    </IfModule>

Erzwingt die Verarbeitung aller passenden Dateien durch den Handler für PHP/FGCI durch einen UNIX-Socket.

#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
    # Tachtler
    # default: DirectoryIndex index.html
    DirectoryIndex index.php index.html index.htm
</IfModule>

Erklärungen:

  • DirectoryIndex index.php index.html index.htm

Erweiterung des DirectoryIndex um die Angabe index.php, in der Liste der Ressourcen, nach denen zu suchen ist, wenn der Client ein Verzeichnis anfordert.

/etc/php74/php-fpm.d/www.conf

Diese Konfigurationsdatei erstellt einen Pool, welcher später für den Dienst/Daemon die einzelnen „Child-Threats“ startet, welche dann letztendlich die Anfragen vom Apache HTTP Server entgegennehmen und ausführen.

Die Änderungen an dieser Konfigurationsdatei sind davon abhängig, welches Verfahren zur Kommunikation mit PHP74-FPM zum Einsatz kommen soll.

  • TCP/IP-Port
  • UNIX-Socket

Nachfolgende Änderungen sind an dieser Konfigurationsdatei durchzuführen:

(Komplette Konfigurationsdatei)

/etc/php74/php-fpm.d/www.conf

Erläuterungen zu den Änderungen

  • pm.status_path = /php-fpm-status

Aktivieren der Statusseite durch setzen des Pfades für den Aufruf!

  • pm.status_listen = /run/php74-fpm/php-fpm-status.sock

Konfiguration des UNIX_Sockets auf dem die PHP74-FPM-Status Informationen abgerufen werden können.

:!: WICHTIG - Es muss ein eigener UNIX-Socket definiert werden!

/etc/php74/php-fpm.conf

Die ist eigentlich die Hauptkonfigurationsdatei des PHP74-FPM.

:!: HINWEIS - Grundsätzlich ist es nicht erforderlich hier Anpassungen vor zu nehmen!:

(Komplette Konfigurationsdatei):

/etc/php74/php-fpm.conf

/ect/php7/php.ini

Die Hauptkonfigurationsdatei von PHP - php.net sollte mindestens nachfolgende Änderungen erfahren:

:!: HINWEIS - Welche php.ini geladen wird, kann mit nachfolgendem Befehl ermittelt werden:

# php -i | grep "Loaded Configuration File"
Loaded Configuration File => /etc/php74/php.ini

(Nur relevante Ausschnitte)

; Tachtler
; default: zlib.output_compression = Off
zlib.output_compression = On
; Tachtler
; default: expose_php = On
expose_php = Off
; Tachtler
; default: ;date.timezone =
date.timezone = "Europe/Berlin"

info-Konfiguration

Nachfolgende Konfiguration ermöglicht es zwei URL-Erweiterungen zu implementieren, welche unter

  • /php-fpm-status - Statusinformationen PHP74-FPM

abgerufen werden können.

PHP74-FPM beinhaltet auch die Möglichkeit, eine Status-Abfrage in vier Formaten

  • einfacher Textanzeige (plain/text)
  • JSON-Fromat
  • HTML-Format
  • XML-Format

und dies in einer standard und in einer full Variante.

Nachfolgende Konfigurationen sind dazu notwendig:

info-Konfiguration: /etc/httpd/conf/extra/httpd-info.conf

Verzeichnis/Name Beschreibung
/etc/httpd/conf/extra/httpd-info.conf Beinhaltet Einstellungen zu Statusmeldungen und Informationen des Servers, abrufbar unter speziellen URL-Ergänzungen /server-status, /server-info und neu ldap-status

/etc/httpd/conf/extra/httpd-info.conf

Erklärungen:

  • <Location /php-fpm-status>

Wendet die enthaltenen Direktiven nur auf die entsprechenden URL an.

  • SetHandler "proxy:unix:/run/php74-fpm/php-fpm-status.sock|fcgi://localhost/php74-fpm-status"

Erzwingt die Verarbeitung aller passenden Dateien durch den Handler für PHP74-FPM-Status.

  • Require all granted

Zugriff auf die URL-Erweiterung /php-fpm7-status, ohne Beschränkungen.
Siehe auch nachfolgenden externen Link: Require

:!: HINWEIS - Der Zugriff auf diese URL-Erweiterung sollte durch eine Zugriffsbeschränkung eingeschränkt werden

Siehe auch nachfolgende internen Links:

  • </Location>

Schliesst die Anwendung auf die enthaltenen Direktiven nur auf die entsprechenden URL ab.

info-Konfiguration: Erster Start - php-fpm7

Falls vorstehende Änderungen (natürlich an die jeweiligen Bedürfnisse angepasst) durchgeführt wurden, sollte ein erster Start von PHP74-FPM nichts mehr im Wege stehen.

Danach kann der php74-fpm-Server mit nachfolgendem Befehle gestartet werden:

# systemctl start php74-fpm.service

Mit nachfolgendem Befehl kann der Status des abgefragt werden:

# systemctl status php74-fpm.service 
● php-fpm7.service - The PHP FastCGI Process Manager
     Loaded: loaded (/usr/lib/systemd/system/php74-fpm.service; enabled; preset: disabled)
     Active: active (running) since Tue 2022-12-27 07:51:48 CET; 5s ago
   Main PID: 1142 (php74-fpm)
     Status: "Ready to handle connections"
      Tasks: 3 (limit: 2316)
     Memory: 5.6M
        CPU: 49ms
     CGroup: /system.slice/php74-fpm.service
             ├─1142 "php-fpm: master process (/etc/php74/php-fpm.conf)"
             ├─1143 "php-fpm: pool www"
             └─1144 "php-fpm: pool www"

Dec 27 07:51:48 vmtest systemd[1]: Starting The PHP FastCGI Process Manager...
Dec 27 07:51:48 vmtest php74-fpm[1142]: [NOTICE] fpm is running, pid 1142
Dec 27 07:51:48 vmtest php74-fpm[1142]: [NOTICE] ready to handle connections
Dec 27 07:51:48 vmtest php74-fpm[1142]: [NOTICE] systemd monitor interval set to 10000ms
Dec 27 07:51:48 vmtest systemd[1]: Started The PHP FastCGI Process Manager.

Nachfolgender Befehl kann ebenfalls zur Überprüfung der Lauffähigkeit des php74-fpm-Servers genutzt werden und zeigt die laufenden Prozesse und deren genutzte „Pool“'s, hier (pool www):

# ps auxwwwf | grep php
root        1161  0.0  0.1   7852  2492 pts/0    S+   07:52   0:00                      \_ grep --color=auto php
root        1142  0.0  1.0  83544 21252 ?        Ss   07:51   0:00 php-fpm: master process (/etc/php74/php-fpm.conf)
http        1143  0.0  0.3  83544  6088 ?        S    07:51   0:00  \_ php74-fpm: pool www
http        1144  0.0  0.3  83544  6088 ?        S    07:51   0:00  \_ php74-fpm: pool www

info-Konfiguration: Neustart Apache HTTP Webserver

Nach den vorangegangenen Konfigurationsschritten, sollte einem Neustart nichts im Wege stehen:

# systemctl restart httpd.service

:!: HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !

info-Konfiguration: Tests

Wenn ein erneuter Neustart des Apache HTTP Server erfolgreich durchgeführt wurde, können nachfolgende Abfragen mittels eines Browsers erfolgen, wie in nachfolgenden Bildern dargestellt durchgeführt werden:

Durch anhängen nachfolgenden Zusatzes an die URL: /php-fpm7-status

kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:

ArchLinux - Apache HTTP Server - Mozilla Firefox - /php74-fpm-status

Durch anhängen nachfolgenden Zusatzes an die URL: /php-fpm-status?full

kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:

ArchLinux - Apache HTTP Server - Mozilla Firefox - /php-fpm-status?full

Durch anhängen nachfolgenden Zusatzes an die URL: /php-fpm-status?html

kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:

ArchLinux - Apache HTTP Server - Mozilla Firefox - /php-fpm-status?html

Durch anhängen nachfolgenden Zusatzes an die URL: /php-fpm-status?html&full

kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:

ArchLinux - Apache HTTP Server - Mozilla Firefox - /php-fpm-status?html&full

Mit nachfolgendem Befehl, kann eine einfache Datei mit PHP Inhalt erzeugt werden, welcher dann die bekannte PHP74-Statusseite zur Anzeige bringen sollte. Hier nachfolgendes Beispiel:

# echo '<?php phpinfo(); ?>' > /srv/http/phpinfo.php 

Anschliessend kann diese Datei dann wie folgt über z.B. einen Browser aufgerufen werden, falls dieser entsprechend konfiguriert ist. Eine Ausgabe, wie nachfolgende, sollte erscheinen:

ArchLinux - Apache HTTP Server - Mozilla Firefox - PHP74-Info Abfrage

:!: WICHTIG - Es muss hier die Anzeige

  • Server-API FPM/FastCGI

erscheinen!

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/apache_http_server_archlinux_-_php74-fpm_-_alternativer_php-interpreter.txt · Zuletzt geändert: 2023/01/23 08:30 von klaus