Microsoft IIS
Diese Seite ist für Hosting-Unternehmen, die Windows-Hosting anbieten und wissen wollen, ob Exponential Teil davon sein kann. Sie beantwortet: was die Quellen über IIS sagen, was unter Windows anders funktioniert, welches Routing eine IIS-Website nachbilden muss und was Sie testen. Die eigenen Verwaltungswerkzeuge von IIS werden hier nicht beschrieben; sehen Sie dafür in der Dokumentation von Microsoft nach.
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.
Inhalt
- Status
- Was Windows ändert
- Was der Kernel über IIS weiß
- Nachzubildendes Routing
- Tests, bevor Sie es anbieten
- Alternativen auf Windows-Maschinen
- Checkliste
Status
| Quelle | Aussage |
|---|---|
README.md, Abschnitt „The traditional options“ | Microsoft IIS schreibt mit dem URL Rewrite Module (web.config) um, für Windows-Hosting |
| Unterstützung von Betriebssystemen, Webserver | Microsoft IIS mit FastCGI: Stufe 3; das Modul URL Rewrite (web.config); die Anfragebehandlung des Kernels hat Tests für Servervariablen von IIS 7 |
| Unterstützung von Betriebssystemen, PHP-SAPIs | CGI / FastCGI (cgi-fcgi) ist die SAPI für IIS unter Windows |
| Unterstützung von Betriebssystemen, Windows | nutzen Sie die offiziellen PHP-8-Builds für Windows (x64, nicht threadsicher für FastCGI) mit Apache oder IIS |
Mit Exponential wird keine web.config ausgeliefert. Stufe 3 bedeutet: sollte funktionieren, hier nicht getestet
(Die vier Stufen).
Was Windows ändert
Aus Unterstützung von Betriebssystemen, Windows:
pcntlundposixgibt es unter Windows nicht. Asynchrones Veröffentlichen (bin/php/ezasynchronouspublisher.php) ist nicht verfügbar.- Velocity führt seine Worker unter Windows als Unterprozesse
php-cgiaus, ohne gemeinsame Nutzung von Speicher durch Copy-on-Write. Seine Windows-Binärdateien in einer Datei werden ohneintlgebaut, das die Einrichtung von Exponential verlangt; betreiben Sie Velocity unter Windows über das Phar mit dem offiziellen PHP statt über seine Binärdatei (sollte funktionieren, ist aber laut den eigenen Plattformhinweisen der Engine ungetestet). - Die Dokumentation und die Shell-Befehle in dieser Hilfe sind für Linux geschrieben; übertragen Sie Pfade und Berechtigungen.
- Der Setup-Assistent sucht ImageMagick auch unter Windows-Namen (
convertim.exe,convert.exe, insettings/setup.ini).
Hinweis Für einen Hoster ist die praktische Folge, dass sich ein Windows-Tarif wie ein klassischer FastCGI-Tarif verhält: kein Worker-Pool von Velocity mit gemeinsamem Speicher, kein asynchrones Veröffentlichen. Nennen Sie das in der Tarifbeschreibung.
Was der Kernel über IIS weiß
eZSys(inlib/ezutils/classes/ezsys.php) erkennt umgeschriebene Anfragen von IIS an der ServervariablenIIS_WasUrlRewrittenund arbeitet dann im Modus mit virtuellem Host, wie im.htaccess-Modus von Apache. Eine Website kann diesen Modus auch mitsite.ini [SiteAccessSettings] ForceVirtualHost=trueerzwingen.- Die Testdaten der Servervariablen in den Tests des Kernels enthalten IIS 7 und IIS 7.5 mit FastCGI (
tests/tests/lib/ezutils/server/), im Modus mit und ohne virtuellen Host.
Diese Testdaten wurden mit alten PHP-Versionen aufgezeichnet; sie decken ab, wie IIS seine Variablen meldet, nicht ein aktuelles IIS mit PHP 8. Testen Sie Ihren eigenen Stack.
Nachzubildendes Routing
IIS liest .htaccess nie, exp:setup:htaccess schützt eine IIS-Website also nicht
(.htaccess und config.php von der Konsole einrichten).
Welchen Regelsatz Sie für IIS auch schreiben, er muss tun, was .htaccess_root tut
(Kapitel 8, Wie eine Anfrage ausgeliefert wird):
| Anfrage | Muss gehen an |
|---|---|
eine Datei oder ein Verzeichnis mit Punkt (.git, .env, .htaccess), außer .well-known | 404 |
eine vorhandene .php, .phtml oder .phar unterhalb der Wurzel | 404 |
/api/... | index_rest.php |
/content/treemenu..., /<siteaccess>/content/treemenu... | index_treemenu.php |
ein aufgeführter Asset-Pfad (Stylesheets, Bilder, Skripte und Schriften von Designs und Erweiterungen; var/*/storage/images; Originalbilder; gespeicherte PDF-Exporte; öffentliche Caches; share/icons; die Icon-Themes der Erweiterungen, extension/<name>/icons/, Bilder mit genau einer Dateiendung; Paketvorschauen; favicon.ico, robots.txt, index.js, sw.js, w3c/p3p.xml) | als Datei gesendet |
| alles andere | index.php |
Die regulären Ausdrücke jeder Zeile stehen in .htaccess_root und, für die Asset-Liste, in expVelocity::STATIC_PATHS
(kernel/classes/expvelocity.php). Der abgeleitete nginx-Block auf nginx mit PHP-FPM zeigt dieselbe Liste
bereits einmal übersetzt.
Warnung Behalten Sie die Reihenfolge bei: die Regeln für Dateien mit Punkt und für Skripte zuerst, die Auffangregel zuletzt. Eine Auffangregel an erster Stelle oder eine Asset-Regel, die
.phptrifft, kann Dateien ausführen oder preisgeben.
Tests, bevor Sie es anbieten
Führen Sie die vier Prüfungen des Routings aus Webserver und Engines aus, dann:
- Die Startseite, eine Inhaltsseite,
/user/loginund die Administration antworten. - Ein hochgeladenes Bild wird angezeigt, und eine hochgeladene Datei lässt sich über
content/downloadherunterladen. - Die geplante Aufgabe, die
runcronjobs.phpausführt, funktioniert mit dem PHP der Kommandozeile (Cronjobs). - PHP für Web und Kommandozeile hat dieselbe Version mit denselben Erweiterungen (Kapitel 2, PHP für Kommandozeile und Web).
- 64-Bit-PHP: 32-Bit-PHP beschränkt eine Website auf 30 Sprachen (Unterstützung von Betriebssystemen).
Alternativen auf Windows-Maschinen
- Apache mit FastCGI-PHP unter Windows: Die mitgelieferte
.htaccess_rootgilt direkt (kopiert mitphp bin/php/console exp:setup:htaccess --apply). - WSL2 führt die Linux-Stufen aus und ist der einfachere Weg für die Entwicklung unter Windows.
- Eine virtuelle Linux-Maschine oder ein Container auf dem Windows-Host, wenn sich der Tarif so bauen lässt (Container, Docker und Podman).
Checkliste
- To do: Offizieller nicht threadsicherer PHP-8-Build für x64 mit FastCGI;
intlund die anderen erforderlichen Erweiterungen vorhanden. - To do: Ein Regelsatz, der die Routing-Tabelle oben nachbildet, mit den Prüfungen des Routings getestet.
- To do: Die Tarifbeschreibung nennt, dass der Worker-Pool von Velocity und asynchrones Veröffentlichen nicht dazugehören.
- To do: Geplante Aufgaben für Cronjobs eingerichtet und getestet.
- To do: Vor dem Verkauf auf Staging getestet (Stufe 3).
Verwandte Seiten
- Einen Webserver wählen
- Betriebssysteme für Hoster
- Unterstützung von Betriebssystemen
- Kapitel 8: Die Website ausliefern
- .htaccess und config.php von der Konsole einrichten
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
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.