Webserver-Beispiele
Exponential ist ein Verzeichnis mit PHP-Dateien. Gleich welcher Webserver es ausliefert: Das Document Root ist das
Wurzelverzeichnis der Installation (das Verzeichnis mit index.php), und es gilt dasselbe Routing. Eine kurze Liste
von Asset-Pfaden wird als Datei gesendet, drei Front-Controller werden ausgeführt, und jede andere Anfrage beantwortet
index.php, das niemals eine Datei herausgibt. Genau das schützt settings/, var/, vendor/, kernel/,
composer.json und die SQLite-Datenbank, obwohl sie innerhalb des Document Root liegen. Die Liste ist an einer
einzigen Stelle festgehalten, in .htaccess_root, und Velocity setzt sie Regel für Regel um
(expVelocity::STATIC_PATHS, FRONT_CONTROLLERS und ENTRY_SCRIPTS in kernel/classes/expvelocity.php).
Warnung
.htaccessbremst jede Anfrage. Sind.htaccess-Dateien erlaubt (AllowOverridealles außerNone), 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 Noneim 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 auchstaticcache_offload.conf), setzen SieAllowOverride None, führen Sieapachectl configtestaus, 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.
Jedes Beispiel auf diesen Seiten ist eine vollständige Datei zum Kopieren; ersetzen Sie darin example.com und
/var/www/example.com. Jedes setzt dieselbe Liste um, in dieser Reihenfolge:
- Eine Punktdatei oder ein Punktverzeichnis (
.git,.env,.htaccess) beantwortet überall 404;.well-knownist davon ausgenommen. - Eine vorhandene
.php-,.phtml- oder.phar-Datei unterhalb des Wurzelverzeichnisses beantwortet 404: Kein Skript wird ausgeführt, nur weil sein Pfad angefragt wurde. /api/...und/index_rest.phpgehen anindex_rest.php,/content/treemenu...(mit oder ohne vorangestellten Siteaccess) anindex_treemenu.php.- Die Asset-Liste wird als Datei gesendet: Design- und Erweiterungs-Design-Verzeichnisse,
share/icons, die Icon-Themes der Erweiterungen (extension/<name>/icons/: SVG-, PNG- und GIF-Bilder mit genau einer Dateiendung), gespeicherte Bilder, die Bild-Originale, gespeicherte PDF-Exporte, die öffentlichen Caches, Paketvorschauen,favicon.ico,robots.txt,index.js,sw.jsundw3c/p3p.xml. - Alles andere geht an
index.php.
Welche Konfiguration
| Server | Seite | Datei zum Kopieren | Wie geprüft wurde |
|---|---|---|---|
| Velocity (empfohlen) | Velocity | velocity.ini.append.php.example, exponential-velocity.service | jede Einstellung existiert in settings/velocity.ini; systemd-analyze verify |
Apache, .htaccess | Apache .htaccess | ../htaccess (= .htaccess_root + optionale Blöcke) | httpd -t; ein Wegwerf-Apache beantwortete jede Testanfrage wie erwartet |
| Apache, virtueller Host | Apache, virtueller Host | ../ezpublish.conf | httpd -t; ein Wegwerf-Apache beantwortete über HTTP und HTTPS jede Testanfrage wie erwartet |
| nginx | nginx | nginx.conf | nginx -t; ein Wegwerf-nginx beantwortete über HTTP und HTTPS jede Testanfrage wie erwartet |
| Caddy | Caddy | Caddyfile.example | frankenphp validate (Caddy 2.11 in FrankenPHP 1.12.7) |
| FrankenPHP | FrankenPHP | frankenphp.Caddyfile.example | frankenphp validate |
| LiteSpeed, OpenLiteSpeed | LiteSpeed | openlitespeed-vhost.conf | nicht auf LiteSpeed ausgeführt; seine Rewrite-Regeln beantworteten in Apaches mod_rewrite jede Testanfrage wie erwartet |
| LiteSpeed, OpenLiteSpeed: Seiten-Cache | Seiten-Caching mit LiteSpeed und OpenLiteSpeed | litespeed-page-cache.conf (und auskommentierte Blöcke in .htaccess_root und openlitespeed-vhost.conf) | nicht auf LiteSpeed ausgeführt; die Adressbedingung wurde mit PCRE gegen Beispieladressen geprüft (gespeichert, und ausgenommen: die Administration, user/, shop/, content/-Ansichten außer view/) |
| IIS | IIS | web.config | nur wohlgeformtes XML (xmllint); nicht auf IIS ausgeführt |
| PHP-FPM (hinter Apache, nginx, Caddy) | PHP-FPM-Pool | php-fpm-pool.conf | php-fpm -t |
Die Testanfragen: /.git/config, /.env, Skripte unterhalb des Wurzelverzeichnisses (in extension/, kernel/,
vendor/, im Paketspeicher, in einem Asset-Verzeichnis) und eine Punktdatei in einem Asset-Verzeichnis müssen 404
beantworten, ohne ihren Inhalt zu zeigen; /settings/site.ini, /composer.json, /config.php, /var/log/error.log
und ein gespeichertes Original, das kein Bild ist, müssen bei index.php ankommen und dürfen niemals gesendet werden;
/api/... muss bei index_rest.php ankommen und /content/treemenu/... bei index_treemenu.php; jede Art von
gelistetem Asset muss gesendet werden (200), und ein hochgeladenes SVG muss die Content Security Policy sandbox
tragen. Führen Sie dieselben Anfragen gegen Ihren eigenen Server mit den Befehlen aus
Kapitel 13, Abschnitt 13.2 aus.
Zwei Dinge, die jedes Setup gemeinsam hat
- Verwenden Sie niemals eine generische Konfiguration nach dem Muster „Datei ausliefern, wenn sie existiert, sonst
index.php“ (nginxtry_files $uri /index.php, Caddysphp_fastcgioderphp_server): Sie gibt jede vorhandene Datei heraus,settings/*.inieingeschlossen. .well-knownist erreichbar, steht aber nicht auf der Asset-Liste. Die Punktregel lässt es in Ruhe, danach geht die Anfrage wie jede andere anindex.php. Ein Zertifikats-Client, der dort Challenge-Dateien ablegt (certbot --webroot), braucht einen Host für reines HTTP, der sie ausliefert, wie es die Hosts für Port 80 in den Beispielen für Apache und nginx tun; Caddy, FrankenPHP und die Engineqbixvon Velocity beantworten ACME-Challenges selbst.
Welche Server .htaccess lesen. Apache (mit AllowOverride All) und LiteSpeed Enterprise lesen sie bei der
nächsten Anfrage: Dort kopiert ./console exp:setup:htaccess --apply die Datei .htaccess_root an ihren Platz
(--static kopiert .htaccess_root_static), mehr ist nicht nötig. OpenLiteSpeed liest nur ihre Rewrite-Regeln, nur
mit eingeschaltetem autoLoadHtaccess und erst nach einem Neustart. nginx, Caddy, FrankenPHP und IIS lesen sie nie:
Ihre Regeln stehen in den Konfigurationen dieser Seiten. Velocity hat die Regeln von .htaccess_root eingebaut;
kopieren Sie die Datei trotzdem, wenn Apache denselben Baum ausliefern könnte. Siehe
.htaccess und config.php von der Konsole einrichten.
WebDAV wird von keinem dieser Beispiele weitergeleitet: Es ist standardmäßig aus. Seit 6.0.15 ist sein
Einstiegsskript index_webdav.php (webdav.php leitet bis zu einer späteren Hauptversion nur dorthin weiter). Um es
auszuliefern, fügen Sie auf Apache, nginx oder IIS eine Regel für index_webdav.php hinzu oder richten einen eigenen
WebDAV-Host ein; Velocity, Caddy und FrankenPHP führen es nicht aus. Regeln vorher/nachher für jeden Server und wie Sie
sie testen: Das WebDAV-Einstiegsskript heißt jetzt index_webdav.php.
Ebenfalls in diesem Verzeichnis
../staticcache_offload.conf: Apache-Regeln, die eine vom statischen Inhalts-Cache erzeugte Seite ausliefern, ohne PHP zu starten (.htaccess_root_staticist.htaccess_root, in dem sie bereits enthalten sind).../README.md: alle Beispiele der Dokumentation.
Öffentliche Demos. Die Einstellungen, die für jeden dieser Server den Demomodus einschalten (EXP_DEMO_MODE=1),
finden Sie unter Beispiele für den Demomodus.
Verwandte Seiten
- Kapitel 8, Die Site ausliefern: Velocity, Apache, nginx und FrankenPHP Schritt für Schritt.
- Kapitel 13, Sicherheitshärtung: was der Webserver niemals ausliefern darf, Header, HTTPS.
- Velocity-Engines und FrankenPHP (auf Englisch).
- .htaccess und config.php von der Konsole einrichten:
exp:setup:htaccess,exp:setup:config,exp:config:*. - Freie Dokumentation: Diese Seite darf frei kopiert, übersetzt und verbessert werden.