Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Apache mit PHP-FPM

Wie ein Hoster Exponential mit Apache httpd 2.4 und einem PHP-FPM-Pool pro Website ausliefert - die mitgelieferten Rewrite-Regeln, der virtuelle Host, HTTPS, der richtige FPM-Master zum Neuladen, Plesk und die Prüfungen…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/hosting/servers/apache-with-php-fpm.md

On this page

This page is a translation. Read the English original

Apache mit PHP-FPM

Diese Seite ist für Systemadministratoren bei Hosting-Unternehmen, die Exponential mit Apache httpd 2.4 und PHP-FPM ausliefern, der klassischen Einrichtung und der üblichen auf Shared Hosting und Control Panels. Sie beantwortet: welche Module und Regeln nötig sind, wie der virtuelle Host aussieht, wie HTTPS und der PHP-FPM-Pool hineinpassen, welchen FPM-Master Sie nach einer Änderung neu laden und wie Sie das Ergebnis prüfen. Die Quelle ist Kapitel 8, Apache mit PHP-FPM.

Warnung .htaccess bremst jede Anfrage. Sind .htaccess-Dateien erlaubt (AllowOverride alles außer None), geschweige denn genutzt, sucht Apache sie bei jeder Anfrage in jedem Verzeichnis des Pfads und liest und wertet sie aus, und die Ladezeiten der Seiten steigen drastisch (gemessen). Die einzige wirkliche Abhilfe ist, die Funktion für den virtuellen Host abzuschalten: AllowOverride None im virtuellen HTTPS-Host, und die Regeln in der Konfiguration des virtuellen Hosts selbst als mod_rewrite-Regeln. Das ist in Geschwindigkeitstests im Produktivbetrieb weit schneller und die Zeit für die Optimierung einer Produktivkonfiguration unbedingt wert. Stellen Sie sofort um: Übernehmen Sie die Regeln des Beispiels für einen virtuellen HTTPS-Host in Ihren virtuellen Host (mit dem statischen Cache auch staticcache_offload.conf), setzen Sie AllowOverride None, führen Sie apachectl configtest aus, laden Sie Apache neu und testen Sie die Website. Dieselben Regeln für andere Server: nginx, LiteSpeed, Caddy, IIS, Velocity (eingebaut); wohin Regeln für virtuelle Hosts in einem Control Panel gehören: Plesk, cPanel, DirectAdmin, ISPConfig. Unter LiteSpeed oder OpenLiteSpeed kann zusätzlich der Seiten-Cache des Servers anonyme Besucher und Crawler ohne PHP bedienen: Seiten-Caching mit LiteSpeed und OpenLiteSpeed.

Inhalt

  1. Warum Apache
  2. Schritt für Schritt
  3. Regeln in .htaccess oder im virtuellen Host
  4. Der PHP-FPM-Pool
  5. Das richtige PHP-FPM neu laden
  6. Plesk
  7. Auslagerung des statischen Caches
  8. Was schiefgehen kann
  9. Checkliste

Warum Apache

  • Es braucht keinen eigenen langlebigen Prozess des Kunden und passt also zu Shared Hosting.
  • Die Rewrite-Regeln werden mit Exponential als .htaccess_root ausgeliefert; Apache (und LiteSpeed) lesen sie direkt.
  • Unterstützung von Betriebssystemen führt Apache httpd 2.4 mit PHP-FPM (oder mod_php) als Stufe 1. PHP-FPM wird mod_php vorgezogen, das PHP an das Prefork-Modell von Apache bindet (PHP-SAPIs).
  • Es betreibt Exponential auf PHP 8.0 und neuer (PHP 7.4 ohne Support nutzbar) und ist damit die Antwort auf Maschinen mit dem Standard-PHP 8.0 von Red Hat Enterprise Linux 9 und seinen Nachbauten.

Schritt für Schritt

  1. Schalten Sie die Rewrite-Regeln ein. Kopieren, nicht verschieben, damit ein Update eine neue Version bringen kann:

    cp .htaccess_root .htaccess

    Oder ./console exp:setup:htaccess --apply, ausgeführt als Benutzer der Website: Der Befehl übernimmt den Modus der Vorlage, ersetzt eine abweichende .htaccess nur mit --force (nach einer Sicherung) und zeigt ohne --apply nur, was er tun würde (.htaccess und config.php von der Konsole einrichten). Nutzen Sie stattdessen .htaccess_root_static (exp:setup:htaccess --static --apply) nur, wenn die Website einen erzeugten statischen Cache ausliefert (Statischer Cache).

  2. Laden Sie die Module: mod_rewrite, mod_proxy und mod_proxy_fcgi (Debian: a2enmod rewrite proxy_fcgi); für HTTPS mod_ssl, für HTTP/2 mod_http2.

  3. Legen Sie den virtuellen Host an (Pfade und PHP-FPM-Socket anpassen):

    <VirtualHost *:80>
        ServerName example.com
        ServerAlias www.example.com
        # The installation root, where index.php is
        DocumentRoot /var/www/vhosts/example.com/httpdocs
        DirectoryIndex index.php
    
        <Directory /var/www/vhosts/example.com/httpdocs>
            Options FollowSymLinks
            # Lets Apache read the .htaccess created in step 1
            AllowOverride All
            Require all granted
        </Directory>
    
        # Every PHP script goes to the PHP-FPM pool of this site
        <FilesMatch \.php$>
            SetHandler "proxy:unix:/run/php-fpm/example.com.sock|fcgi://localhost"
        </FilesMatch>
    </VirtualHost>
  4. HTTPS. Fügen Sie einen virtuellen Host *:443 mit demselben Inhalt hinzu, plus:

        SSLEngine on
        SSLCertificateFile    /etc/ssl/example.com/fullchain.pem
        SSLCertificateKeyFile /etc/ssl/example.com/privkey.pem
        Protocols h2 http/1.1

    Beziehen Sie das Zertifikat mit certbot oder über das Panel. Sobald HTTPS funktioniert, leiten Sie Port 80 im Host *:80 um (Redirect permanent / https://example.com/).

  5. Prüfen und neu laden:

    apachectl configtest           # Syntax OK
    systemctl reload apache2       # httpd on Red Hat style systems
    curl -sI https://example.com/ | head -1
  6. Sicherheitsheader. Der Kernel sendet sie auf seinen Seiten (site.ini [HTTPHeaderSettings] SecurityHeaders[]). Für statische Dateien fügen Sie dieselben mit mod_headers hinzu, wenn Sie sie auch dort wollen (Kapitel 13).

Regeln in .htaccess oder im virtuellen Host

.htaccessRegeln im virtuellen Host
BrauchtAllowOverride AllAllowOverride None
Kosteneine Dateisuche pro VerzeichnisAllowOverride None spart diese Suche
Kunde kann es ändernja, was zu Shared Hosting passtnein, nur der Hoster
Upgradedie neue .htaccess_root über .htaccess kopieren (exp:setup:htaccess zeigt den Diff, --force --apply kopiert)die geänderten Regeln in den vhost kopieren

Innerhalb von <Directory> behalten die Regeln von .htaccess_root ihre Form. Im Server-Kontext (außerhalb von <Directory>) braucht jedes Muster einen führenden Schrägstrich, wie in doc/eng-us/examples/ezpublish.conf. Die Regelliste dieses Beispiels ist älter als die aktuelle .htaccess_root; nehmen Sie die Regeln also aus .htaccess_root selbst (Kapitel 8, Schritt 3).

Warnung Vergleichen Sie nach jedem Upgrade Ihre kopierten Regeln mit der neuen .htaccess_root. Eine fehlende Regel kann Dateien offenlegen, die nie gesendet werden dürfen; eine hinzugefügte Regel kann genau dafür die Korrektur sein. ./console exp:setup:htaccess gibt diesen Vergleich als Diff aus und endet mit Exit-Code 1, solange .htaccess abweicht; damit eignet er sich auch als Abweichungsprüfung für das Monitoring.

Der PHP-FPM-Pool

Der Pool führt PHP als Benutzer der Website aus. Die Einstellungen, die Kapitel 8 für Exponential nennt (in der Pool-Datei oder der php.ini):

EinstellungEmpfehlung aus den Quellen
memory_limitmindestens 256M in der Produktion; mehr für große Importe. Die Untergrenze des Setup-Assistenten ist 64M (Kapitel 2)
max_execution_timedie Untergrenze des Assistenten ist 30; das Produktionsbeispiel in Kapitel 2 nutzt 60
upload_max_filesize, post_max_sizeder größte Upload des Kunden
date.timezonesetzen; ein fehlender Wert lässt den kritischen Test des Assistenten scheitern
OPcachean, mit eingeschalteter Prüfung der Zeitstempel (OPcache)

Ein Pool pro Kunde, der als Benutzer dieses Kunden läuft, ist die Einheit der Trennung auf einer geteilten Maschine. Die Größe des Pools (Prozessmanager, Anzahl der Kindprozesse, Timeouts) steht auf PHP-FPM abstimmen; Panels und Pools auf PHP-Auswahl und FPM-Pools.

Das richtige PHP-FPM neu laden

Nach einer Änderung einer PHP-Klasse, eines Operators oder einer INI laden Sie den FPM-Master neu, der die Website ausliefert. Auf Maschinen mit mehreren PHP-Versionen ist das oft nicht der, der php-fpm heißt.

systemctl reload php-fpm                                                   # the distribution's single PHP
php bin/php/console exp:velocity deploy --no-velocity --allow-root-user    # finds the right one, clears caches in order
php bin/php/console exp:velocity deploy --no-velocity --dry-run --allow-root-user   # shows what it found and why

exp:velocity deploy funktioniert auch auf Websites nur mit Apache: --no-velocity überspringt die Schritte für Velocity. [DeploySettings] PhpFpmService=auto (in settings/velocity.ini) sucht den Pool, der nach der Hosting-Domain der Installation benannt ist oder ihr Verzeichnis nennt, in /opt/plesk/php/*/etc/php-fpm.d, /etc/php-fpm.d, /etc/php/*/fpm/pool.d und /etc/opt/remi/php*/php-fpm.d (Velocity-Engines, Welches PHP-FPM).

Hinweis Ein Neuladen bleibt nicht auf eine Website beschränkt. Der Master bittet jeden Kindprozess jedes Pools, fertig zu werden, und Anfragen an andere Websites derselben PHP-Version warten währenddessen. Deshalb wartet [DeploySettings] PhpFpmReload=auto darauf, dass OPcache die geänderten Dateien neu prüft, statt neu zu laden, wenn die OPcache-Einstellungen des Pools es erlauben (Velocity-Engines).

Plesk

Plesk erzeugt den virtuellen Host selbst; bearbeiten Sie seine Dateien nicht (Kapitel 8, Plesk):

  • Richten Sie den Document Root der Domain auf das Wurzelverzeichnis der Installation.
  • Wählen Sie in den PHP-Einstellungen „FPM application served by Apache“ und die PHP-Version.
  • Behalten Sie .htaccess (aus .htaccess_root kopiert); der Apache von Plesk liest sie.
  • Installieren Sie das Zertifikat in Plesk und schalten Sie die Umleitung auf HTTPS ein.

Im SSH-Terminal von Plesk, als Systembenutzer des Abonnements und mit dem PHP der Domain, legt /opt/plesk/php/<version>/bin/php bin/php/console exp:setup:htaccess --apply die Kopie an. Als root ergänzen Sie --allow-root-user und bei Bedarf --owner=<abonnement-benutzer>:psacln (Plesk).

Plesk benennt jeden Pool nach der Domain in /opt/plesk/php/<version>/etc/php-fpm.d/<domain>.conf, ausgeliefert von der Unit plesk-php<XY>-fpm (zum Beispiel plesk-php85-fpm). systemctl restart php-fpm startet einen anderen Master neu, den keine Plesk-Website nutzt. Mehr auf Plesk.

Auslagerung des statischen Caches

Mit .htaccess_root_static oder den Regeln aus doc/eng-us/examples/staticcache_offload.conf im vhost der öffentlichen Website beantwortet Apache eine erzeugte statische Seite aus ihrer Datei, ohne PHP zu starten. Fügen Sie diese Regeln nie dem vhost der Administration hinzu. Siehe Statischer Cache.

Was schiefgehen kann

SymptomUrsacheAbhilfe
404 für jede Seite.htaccess wird nicht gelesen (AllowOverride) oder mod_rewrite ist ausOverrides erlauben, mod_rewrite laden
404 für jedes Asset unter design/der Document Root ist nicht das Wurzelverzeichnis der InstallationDocumentRoot auf das Verzeichnis mit index.php richten
500ein PHP- oder Berechtigungsfehlerdie Fehlerlogs von Apache und PHP-FPM lesen, dann var/log/error.log
200 für /.git/config oder einen .php-Pfad des KernelsRegeln nicht aktivbeheben, bevor die Website öffentlich ist
Eine Änderung scheint nicht zu wirkender neu geladene FPM-Master ist nicht der, der die Website ausliefertexp:velocity deploy --no-velocity --dry-run
Dateien in var/ gehören rootein Konsolenskript wurde als root ausgeführtSkripte als Benutzer der Website ausführen (Kapitel 8, Ein Benutzer oder eine Gruppe)

Checkliste

  • To do: .htaccess aus .htaccess_root kopiert (oder die Regeln im vhost), mod_rewrite und mod_proxy_fcgi geladen.
  • To do: Document Root ist das Wurzelverzeichnis der Installation.
  • To do: Ein PHP-FPM-Pool pro Website, als Benutzer der Website; OPcache an.
  • To do: HTTPS mit einem CA-Zertifikat; Port 80 umgeleitet, sobald HTTPS funktioniert.
  • To do: Die vier Prüfungen des Routings aus Webserver und Engines bestehen.
  • To do: Der Support weiß, welche FPM-Unit die Website ausliefert (exp:velocity deploy --no-velocity --dry-run).

Demomodus mit Apache und PHP-FPM. Für eine öffentliche Demo erreicht SetEnv EXP_DEMO_MODE 1 in ihrem virtuellen Host oder ihrer .htaccess PHP-FPM als FastCGI-Parameter über mod_proxy_fcgi, den getenv() liest; env[EXP_DEMO_MODE] = 1 im Pool der Demo tut dasselbe. Beispiele für den Demomodus, Demomodus für Hoster.

Verwandte Seiten

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x