Need some IIS stuff?
I just stumpled across the offical Microsoft IIS Site, which I didn’t actually knew so far. This is a great resource for IIS, especially if your looking for security or performance related addons for IIS.
I just stumpled across the offical Microsoft IIS Site, which I didn’t actually knew so far. This is a great resource for IIS, especially if your looking for security or performance related addons for IIS.
I just run into an odd problem. For testing purpose I wanted to run a ASP.Net application with some privileged account. So just for the heck I created a new app-pool in IIS and assigned this pool to my app. Then I set the identity of the app pool to my own domain-account – this should definitely work, since I’m a local administrator on this dev-machine – who if not the admin should run an app?
But the eventlog stated something strange: the identity of my newly created app pool is invalid! And accessing the app kinda proves this: the app pool is being deactivated in IIS.
But now to the rescue: the identity setup in the app-pool must be a member of the local IIS_WPG group.
Grundsätzlich gibt es zwei unterschiedliche Möglichkeiten um PHP für den IIS unter Windows zu installieren. Zum Einen kann man PHP manuell installieren, zum Anderen gibt es einen fertigen Installer. Da ich bisher PHP immer nur manuell installiert habe, und das ganze auch mit wenigen Handgriffen erledigt ist, werde ich auch nur diesen Weg beschreiben. Auch gibt es verschiedene Möglichkeiten PHP mit dem IIS zu “verbinden”, am einfachsten und am häufigsten ist die Verwendung des ISAPI-Filters.
Diese Anleitung beschreibt das Vorgehen für den IIS 5.x; für Windows 2003 bzw. den IIS 6 sieht das ganze ein wenig anders aus, da muss man den ISAPI-Filter noch explizit zur Auführung aktivieren.
Grundsätzlich ist das Vorgehen identisch, ausser daß einmal die Eigenschaften des Servers und ansonsten die Eigenschaften eines Verzeichnisses oder eines virtuellen Servers geändert werden müssen.
php5isapi.dll auswählen, Dateierweiterung ist .php. Bei den Verben kann nun alle ausgewählt werden, wodurch alle HTTP-Methoden zugelassen werden (auch solche wie OPTIONS oder PROPFIND), oder das ganze auf GET, POST, HEAD einschränken. Abschließend noch sicherstellen, daß die Haken bei “Skriptmodul” und “Prüfen, ob Datei existiert” gesetzt sind.Die Einrichtung ist nun schon fast vollständig abgeschlossen. Um die Konfiguration von PHP noch vornehmen zu können muss entweder die php.ini in das %WINDIR%\system32 kopiert werden, oder PHP muss per Umgebungsvariable PHPRC mitgeteilt werden in welchem Verzeichnis sich die php.ini befindet. Nach dem setzen der Umgebungsvariable muss der Rechner ggf. neu gestartet werden, bevor die Änderung übernommen werden kann, weil die Umgebungsvariablen von dem IIS nur während des bootens ausgelesen werden.
Eine Möglichkeit besteht darin, den Datenverkehr, der von einem Webserver zum Browser gesendet wird zu komprimieren. Dazu wird in der Regel das gzip-Verfahren eingesetzt, welches im Hintergrund den gesamten Datenverkehr komprimiert. Somit können die Daten zwischen Server und Client schneller übertragen werden. Dieses Verfahren wird von den gängigsten Browsern und Servern unterstützt. Auch der IIS bietet die Möglichkeit sowohl statische als auch dynamisch erzeugte Web-Seite per gzip zu komprimieren.
Allerdings zeigt die Umsetzung dieser Technik auf Seiten des Clients (hier konkret des Internet Explorers) ein Problem auf. Gerade bei dynamischen Seiten, wie sie ja oftmals für Intranet-Inhalte typisch sind, will man oft nicht, daß die Seiten auf dem Client gecached werden, sondern die Seiten sollen bei jedem Zugriff immer wieder neu vom Server angefordert werden. Damit soll sichergestellt werden, daß die mobilen Anwender immer auf die aktuellen Daten und Informationen des Unternehmens zugreifen können. Um das Cachen von Seiten zu verhinden gibt es bestimmte “Attribute” die man einer HTML-Seite geben kann, damit sie vom Client nicht gecached wird. Leider werden diese Attribute vom Internet Explorer in zusammenhang mit gzip-komprimierten Seiten schlichtweg ignoriert. Das Ergebnis: die Seiten werden dennoch gecached.
Bei einfachen Inhalten, die sich sowieso nicht so häufig ändern stellt das noch kein Problem dar, allerdings bei Web-Anwendungen wird dies schon zu einem Problem. Hier wird oftmals immer nur eine einzige Seite, jeweils mit unterschiedlichen Parametern, aufgerufen, die dann die gesamte Darstellung und Verarbeitung übernimmt. Wird hier bei jedem Klick immer wieder die gleiche Seite angezeigt, weil der Browser die Seite, mit den nun “neuen” Parametern, nicht erneut vom Webserver anfordert sondern, wegen der permanent gleichen Adresse, die gecachte Seite anzeigt, so ist dieses Verhalten nicht akzeptabel.
Obwohl das gzip-Verfahren schon lange verwendet wird, gerade im Unix-Bereich schon seit Jahren etabliert ist, so scheitert der praktische Einsatz an den unzulänglichkeiten des Internet Explorers.
Informationen von Microsoft: Microsoft Knowledge Base Article – 321722 Content with “Content-Encoding: gzip” Is Always Cached Although You Use “Cache-Control: no-cache”