Das Konfigurationssystem in IIS 7
von Walter Oliver
Übersicht
IIS 7 führt ein brandneues Konfigurationssystem ein, das im Zentrum aller neuen verwaltungsbezogenen Features steht. Das Konfigurationssystem basiert auf verteilten, Klartext-, XML-Dateien, welche die Konfigurationseinstellungen für die gesamte Webserverplattform enthalten, einschließlich IIS, ASP.NET und anderen Komponenten wie FTP 7.5. Sie können optional in den Inhaltsverzeichnissen zusammen mit den Webinhalten festgelegt werden, wenn sie für diese Ebene entsperrt sind. Beachten Sie, dass FTP 6.0-Konfigurationseinstellungen in der MetaBase gespeichert sind.
Verschiedene Ebenen der Konfigurationshierarchie können vom Computeradministrator an andere Benutzer delegiert werden, z. B. den Websitebesitzer oder den Anwendungsentwickler. Sichere Standards und sofort einsatzbereite Sperren beschränken den Schreibzugriff auf Konfigurationseinstellungen nur für den Computeradministrator (die Ausnahmen sind einige Website-spezifische Einstellungen wie DefaultDocument). Komplexe und granulare Sperrfunktionen ermöglichen jedoch eine sichere Entsperrung und Delegierung der Verwaltung bestimmter Konfigurationseinstellungen für mehr Benutzer für ihren Bereich des Webnamespace. Das System ist abwärtskompatibel auf API-Ebene mit früheren Versionen von IIS (nachdem die MetaBase-Kompatibilitätsebene installiert wurde).
Auf der Stammebene (oder der globalen Ebene) gibt es zwei separate Dateien:
- system32\inetsrv\config\applicationHost.config: Enthält die globalen Standards für Webservereinstellungen (IIS).
- \Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config: Enthält die globalen Standards für die .NET Framework-Einstellungen, einschließlich einiger der ASP.NET-Einstellungen (die restlichen Einstellungen befinden sich in der Datei web.config im selben Ordner, der manchmal als Stamm-web.config bezeichnet wird).
Der Grund dafür, dass es immer noch zwei separate Dateien gibt, liegt daran, dass die beiden Technologien unterschiedlich versioniert sind (zeitlich und produktbezogen). IIS ist Teil von Windows, und das .NET Framework kann unabhängig davon versioniert sein.
In den Webinhaltsverzeichnissen gibt es möglicherweise optionale web.config-Dateien, die das Verhalten für ihre Ebene der Hierarchie und nach unten steuern. Sie können lokal oder remote sein (wenn sich das Inhaltsverzeichnis beispielsweise auf einer UNC-Freigabe befindet). Sie können IIS-, ASP.NET- oder andere .NET Framework-Konfigurationseinstellungen enthalten, die auf ihrer Ebene angegeben werden können. Standardmäßig sind keine web.config-Dateien vorhanden.
Hierarchie
In Bezug auf die Vererbungshierarchie ist die Stammdatei machine.config, dann web.config im selben Verzeichnis (als Stamm-web.config bezeichnet), dann applicationHost.config und dann die optionalen web.config-Dateien entlang des Namespaces, wie im folgenden Diagramm dargestellt.
Abschnitte
Innerhalb einer Konfigurationsdatei sind die Einstellungen auf strukturierte Weise basierend auf einer Einheit namens „Abschnitt“ organisiert. Der Konfigurationsabschnitt ist eine Gruppe logisch verwandter Einstellungen, die als Ganzes bereitgestellt oder deren Registrierung vom System als Ganzes aufgehoben werden können und normalerweise von einem Servermodul genutzt werden.
Mit anderen Worten: Für fast jedes Runtimemodul, das im Arbeitsprozess ausgeführt wird, gibt es einen entsprechenden Konfigurationsabschnitt. Der Konfigurationsabschnitt ist auch die Erweiterungseinheit: Das Hinzufügen neuer Einstellungen zum Konfigurationsschema erfolgt durch Erweitern eines vorhandenen Abschnitts oder durch Hinzufügen eines oder mehrerer Abschnitte zum Schema.
Die Abschnitte werden weiter in logisch verwandte Sammlungen gruppiert, die als „Abschnittsgruppen“ bezeichnet werden. Abschnittsgruppen sind nicht die Einheit der Bereitstellung oder Registrierung oder anderer wesentlicher Vorgänge (z. B. Sperren, Verschlüsselung). Sie verfügen nicht über eigene Einstellungen. Ihr Zweck besteht darin, die Organisation von Einstellungen weiter zu strukturieren und eine lange flache Liste von Konfigurationsabschnitten zu vermeiden. Sie werden verwendet, um eine Hierarchie von Einstellungen zu erstellen, sodass sie Beziehungen zwischen ihnen haben (übergeordnetes/untergeordnetes Element).
Mit anderen Worten: Abschnittsgruppen können geschachtelt werden. Ein bestimmter Abschnitt gehört immer nur zu einer Abschnittsgruppe und darf keinen anderen Abschnitt (oder Abschnittsgruppen) enthalten. Eine bestimmte Abschnittsgruppe kann zu einer übergeordneten Abschnittsgruppe gehören und kann null oder mehr untergeordnete Abschnittsgruppen enthalten. Sie enthält in der Regel mehr als einen Abschnitt, andernfalls gibt es keinen guten Grund, sie überhaupt zu haben (Kunden können das Schema jedoch erweitern, indem sie ihre eigenen Abschnittsgruppen erstellen, die nur einen Abschnitt haben, aus welchem Grund auch immer).
Hier ist ein Beispiel, das Abschnitte und Abschnittsgruppen veranschaulicht:
<!-- section group for web server configuration -->
<system.webServer>
<!-- section group for web server security configuration -->
<security>
<!-- section group for web server authentication configuration -->
<authentication>
<!-- three sections for authentication -->
<basicAuthentication ... />
<windowsAutnentication ... />
<anonymousAuthentication ... />
</authentication>
</security>
</system.webServer>
Jeder Abschnitt hat einen Namen. Der Kurzname ist der Name des Abschnitts selbst, und der lange Name ist der vollständige Name einschließlich aller enthaltenden Abschnittsgruppen. Beispielsweise lautet der vollständige Name für „windowsAuthentication“ „system.webServer/security/authentication/windowsAuthentication“. Diese hierarchische Organisation ermöglicht zukünftige Abschnitte (und Abschnittsgruppen) mit demselben Namen, aber unter verschiedenen Abschnittsgruppen.
Jede Ebene des URL-Namespaces kann eine zugeordnete Konfiguration haben. Die Konfiguration für eine bestimmte Ebene erbt auf untergeordneten Ebenen, es sei denn, dies wird von einer untergeordneten Ebene überschrieben. Eine einfache Möglichkeit, eine Konfiguration pro URL zu erreichen, ist die Verwendung von web.config-Dateien in den physischen Dateisystemordnern, die den virtuellen Pfaden zugeordnet sind. Auf der Stammebene (der Computerebene) sollten separate Dateien verwendet werden, abhängig von der Konfigurationsabschnittsgruppe (die später im Dokument definiert wird; zum jetzigen Zeitpunkt sollte sie als Name des XML-Elements betrachtet werden, das die Konfiguration enthält):
Abschnittsgruppe | Beschreibung | Stammdatei |
---|---|---|
system.applicationHost | Windows-Aktivierungssystem: Prozessmodell | System32\inetsrv\config\applicationHost.config |
system.webServer | IIS-Webserver | System32\inetsrv\config\applicationHost.config |
system.web | ASP.NET | Windows\microsoft.net\framework\v2.0.50727\config\web.config |
System.* | Weitere .NET Framework | Windows\microsoft.net\framework\v2.0.50727\config\machine.config |
[Andere Microsoft] | Andere Microsoft | Windows\microsoft.net\framework\v2.0.50727\config\machine.config |
[benutzerdefiniert] | Drittanbieter | Entweder machine.config oder root web.config oder applicationHost.config, bis zu Drittpartei / Kunde |
Das Persistenzformat der Konfiguration ist XML. Es ist daher hilfreich, die Zuordnungen zwischen Konfigurationsorganisationseinheiten und XML-Terminologie zu beschreiben. Abschnittsgruppen und Abschnitte sind XML-Elemente. Innerhalb eines Abschnitts werden die Einstellungen in kleineren Einheiten organisiert, die sich eng an die XML-Terminologie anlehnen:
Konfigurationseinheit | XML-Terminologie | Beschreibung |
---|---|---|
Konfigurationselement | XML-Element | Enthält weitere untergeordnete Einheiten, hat keinen Wert. |
Konfigurationssammlung | XML-Element | Privater Fall von Element: enthält eine Gruppe von Elementen in Form von hinzufügen/entfernen/löschen. |
Konfigurationseigenschaft | XML-Attribut | Enthält nur einen Wert, enthält keine untergeordneten Einheiten. |
Das Konfigurationssystem basiert im Kern auf einem deklarativen Schema. Das Konfigurationsschema umfasst mehrere Dateien, die sich an einem bekannten Speicherort befinden: system32\inetsrv\config\schema. Standardmäßig haben nur Computeradministratoren Zugriff auf diesen Ordner. Kunden oder Drittanbieter können Schemadateien für ihre benutzerdefinierten Abschnitte hinzufügen, indem sie diese in dieses Verzeichnis kopieren. Das Konfigurationssystem übernimmt sie automatisch, wenn es gestartet wird, und zwar im Zuge des Aufrufs der Konfiguration. Wenn das Konfigurationssystem bereits ausgeführt wird, werden keine Änderungen an den Schemadateien oder neuen Dateien übernommen.
Bearbeiten Sie keine IIS- oder andere Schemadateien, die in diesem Verzeichnis installiert sind, da Fehler zu beschädigten Schemas und das Starten des Servers verunmöglichen.
Hinweis
Es gibt keine allgemeine befehlsorientierte Benutzerschnittstelle zum Abrufen und Festlegen von Schemadateien, abgesehen von der herkömmlicher Dateizugriffs-API und der XML-Analyse/-Bearbeitung. Es wird immer empfohlen, sensible Daten wie den Schemaordner zu sichern, bevor Änderungen daran vorgenommen werden.
Drei Dateien bilden das einheitliche Schema der Webserverplattform:
- IIS_schema.xml: behandelt die Einstellungen des Windows-Aktivierungssystems und des IIS-Webservers und Abschnittsgruppen.
- ASPNET_schema.xml: behandelt die ASP.NET-Einstellungen in der Abschnittsgruppe.
- FX_schema.xml: behandelt andere .NET Framework-Einstellungen in verschiedenen Abschnittsgruppen.
Sie werden auch FTP_schema.xml finden, wenn Sie das IIS 7-FTP-Feature installiert haben.