IIS 6 und Webanwendungen: Konfiguration und Wartung

29.09.2003 von THOMAS WOELFER 
Der Internet Information Server von Windows 2003 kann mehr als nur HTML-Seiten ausliefern. Lesen Sie, wie Sie ihn richtig konfigurieren, mehrere Domains auf einem Rechner hosten und Webanwendungen bereitstellen.

Der Windows Server 2003 kommt mit einem kompletten Webserver, dem Internet Information Server in der Version 6.0. Der IIS bietet jede Menge Server-Funktionalität im Webbereich: So ist es möglich, mehrere Sites auf einer einzigen Maschine zu hosten, wobei die Sites durch abgekoppelte Prozesse voreinander geschützt sind. Weiterhin lassen sich Ressourcen wie CPU und Bandbreite für ausgewählte Sites beschränken und komplette Webanwendungen in kompilierten Sprachen oder Script-Sprachen realisieren.

Von Haus aus wird der IIS beim Windows Server 2003 in der Standard Edition nicht mitinstalliert. Nur beim kleinen Bruder, der Web Server Edition, ist das der Fall. Hintergrund dafür sind im Wesentlichen Sicherheitsüberlegungen. Bei der Web Server Edition ist allerdings von vornherein klar, dass der IIS mitinstalliert werden soll, denn das ist ja das hauptsächliche Anwendungsgebiet dieser Server-Version. Bei der Standardausgabe ist es hingegen Sache des Administrators zu entscheiden, welche Server-Komponenten gewünscht sind, und daher muss man hier den Webserver manuell nachinstallieren.

Installation des Webservers

Zur Installation gibt es eine ganze Reihe von Möglichkeiten, wobei die einfachste im Assistenten zur Server-Konfiguration zu finden ist. Dieser Assistent kennt alle zur Verfügung stehenden Server-Fähigkeiten und bietet diese zur Auswahl an. Der IIS taucht dabei in der Liste der möglichen Features als "Anwendungsserver" auf. Das ist ein wenig verwirrend, da diese Bezeichnung zunächst eine andere Funktionalität vermuten lässt - doch nach der aktuellen Namensgebung beim Windows-Server ist der IIS eben ein Anwendungsserver. Grund dafür ist die Tatsache, dass man mit dem IIS so genannte Webanwendungen hosten kann. Eine Webanwendung ist dabei im Wesentlichen eine Website, die auch auf die .NET-Laufzeitumgebung zurückgreift und kompilierte Elemente enthält, die mit den .NET-Sprachen und den .NET-Web-Forms entwickelt wurde. Allerdings gilt auch eine klassische Website, die nur HTML enthält, oder eine Webseite mit HTML- und ASP-Code als "Webanwendung".

Bei klassischem ASP wird Script-Code innerhalb einer HTML-Seite platziert. Dieser Code wird vor der Auslieferung der Seite auf dem Server ausgeführt und kann zum Beispiel den eigentlichen Inhalt der Seite erzeugen. Der Code kann aber auch andere Aufgaben erledigen - etwa Zugriffe auf das lokale Dateisystem des Servers oder auf Datenbankinformationen. Der Nachteil von ASP ist an dieser Stelle die Tatsache, dass der Code mehr oder minder jedes Mal neu übersetzt beziehungsweise interpretiert werden muss, wenn die Seite aufgerufen wird. Derartige Seiten haben die Dateierweiterung .ASP und standen schon mit älteren IIS-Versionen zur Verfügung.

ASPX und ASP - der Unterschied ist dramatisch

Echte Webanwendungen finden sich in Seiten mit der Erweiterung .ASPX - hier handelt es sich um Seiten, die nicht mit klassischem ASP, sondern mit ASP.NET entwickelt wurden. Dabei kann die Funktionalität in einer oder mehreren kompilierten DLLs vorliegen, so dass eine Übersetzung des Quellcodes bei jedem Aufruf der Seite entfällt. Der Code in der DLL hat dabei vollständigen Zugriff auf die per DOM zur Verfügung gestellten Elemente, die sich im HTML befinden. Verwendet die Seite beispielsweise den Namespace Web.Forms und enthält ein DataGrid-Control aus diesem Namespace, dann ist dieses Datagrid als Objekt innerhalb des zur DLL gehörenden Quellcodes verfügbar. Der Name des Objekts leitet sich aus der ID des Objekts im HTML ab.

Die Möglichkeiten bei ASPX gehen deutlich weiter als die von ASP, denn mit ASPX steht der Zugriff auf die komplette .NET-Klassenbibliothek zur Verfügung. Diese Bibliothek enthält Klassen für das Memory-Management, für Zugriffe auf das Dateisystem und Datenbanken, für die Netzwerkkommunikation und so weiter und so fort. In Kombination mit den Web-Forms, über die Webseiten mit Kontrollelementen ausgestattet werden können, die den typischen Kontrollelementen von Windows nachempfunden sind, macht das ASPX zu einer sehr produktiven Umgebung für die Entwicklung von Webanwendungen.

Kernkomponenten des IIS

Der IIS ist nicht nur ein Server, der HTTP-Anforderungen entgegennimmt und beantwortet, sondern das Programm stellt noch eine ganze Reihe an weiteren Komponenten zur Verfügung. Diese sind teilweise optional und müssen dementsprechend nachträglich von Hand installiert werden. Hier eine Kurzübersicht über die zur Verfügung stehenden Komponenten:

Der HTTP-Server

Der HTTP-Server ist im Kern für die Auslieferung von Webseiten zuständig. Im Rahmen dieses Servers werden auch ASP- und ASPX-Seiten abgearbeitet und ausgeliefert. Er unterstützt eine Vielzahl von Server-Erweiterungen wie CGI- und ISAPI-Anwendungen.

Der FTP-Server

Der FTP-Server ist eine optionale Komponente des IIS.

Der SMTP-Server

Der SMTP-Server dient der Entgegennahme und dem Transport von E-Mails. Im Kontext eines Webservers wird er hauptsächlich für den Versand von Mails zuständig sein. Sie können die SMTP-Funktionalität per Script oder ASPX erreichen und dann zum Beispiel den Inhalt von Formularen an zuvor festgesetzte Adressen versenden.

Der NNTP-Server

Der NNTP-Server ist das Programm zum Betrieb von News-Seiten im Rahmen des IIS. Der Newsserver ermöglicht das Hosten eigener Diskussionsgruppen auf dem lokalen Server.

Websites erstellen im IIS

Die einfachste Methode zur Erstellung einer Website besteht darin, die gewünschten Dateien in das Verzeichnis wwwroot unterhalb von Inetpub zu kopieren. Dieses Verzeichnis ist nach der Installation des IIS von Haus aus als Website freigegeben, und daher kann man über dieses Verzeichnis auch direkt Dateien zur Verfügung stellen.

Das ist aber nicht unbedingt sinnvoll. Besser ist es, von vornherein davon auszugehen, dass eine IIS-Installation für das Hosten mehrerer Websites zuständig sein wird. Aus diesem Grund schaltet man die Default-Site am besten ab und legt eine eigene Site an. Beide Aufgaben, so wie die meisten der folgenden Aufgaben, lassen sich mit dem IIS-Manager aus dem administrativen Menü erledigen. Der IIS-Manager hat das typische Aussehen einer MMC-Konsole mit einer Baumstruktur am linken Rand. Klickt man auf einen der Container in der Baumstruktur, so wird dessen Inhalt im rechten Teil des Fensters angezeigt. Die Konfiguration der einzelnen Knoten im Baum erfolgt durch einen rechten Mausklick mit der anschließenden Auswahl des Befehls Eigenschaften.

Um die Standard-Website abzuschalten, klicken Sie im Container Websites auf Standardwebsite und in der Toolbar-Leiste auf den Button Stop. Um dann eine eigene Site zu erstellen, klicken Sie auf den Knoten Websites und wählen aus dem Objektmenü den Befehl Neue Website. Daraufhin startet der Assistent zum Anlegen einer neuen Site. Diesem müssen Sie ein paar Fragen beantworten, wobei Sie im Wesentlichen den Ort auf der Festplatte - oder einem Netzwerklaufwerk - angeben, an dem sich die Dateien der Website befinden sollen. Außerdem geben Sie den Namen der Website sowie ein paar Parameter über die Zugriffsmöglichkeiten zu dieser Site an.

Mehrere Sites auf einem Server

Ist der Assistent durchgelaufen, haben Sie bereits eine neue Site angelegt. Allerdings sind an der vom Assistenten angelegten Konfiguration noch ein paar Änderungen notwendig: Im Wesentlichen sollten Sie auf jeden Fall den Host-Header der Website festlegen, damit Sie mehrere Websites parallel auf dem Rechner betreiben können.

Um das zu bewerkstelligen, lassen sich unterschiedliche Methoden verwenden. Eine davon ist die, für jede Webseite eine zusätzliche Netzwerkkarte in Ihr System einzubauen, dieser Netzwerkkarte eine eindeutige IP-Adresse zuzuordnen und dann für jede IP-Adresse eine Website zu konfigurieren. Das mag für zwei Webseiten noch praktikabel sein, aber irgendwann haben die Möglichkeiten zum Einbau neuer Netzwerkkarten ein Ende.

Sie können aber auch mehrere Websites unter nur einer IP-Adresse betreiben. In diesem Fall ist es allerdings nicht möglich, die Sites anhand ihrer IP-Adresse zu identifizieren. Stattdessen können Sie sich entweder für die Angabe von Portnummern oder für die Spezifizierung von Host-Headern entscheiden. Bei der Methode mit den Portnummern wird für jede Webseite eine bestimmte Portnummer vereinbart. Das mag für Intranets oder Verwaltungs-Sites noch funktionieren - bei öffentlich sichtbaren Sites ist das ganz sicher nicht optimal, denn hier wird der Besucher grundsätzlich erwarten, dass die Site auf dem Standard-HTTP-Port (Port 80) betrieben wird.

Mehrere Sites mit Host-Headern auf einer IP-Adresse

Daher ist das Verfahren mit den Host-Headern der beste Weg zum Betrieb mehrerer Sites auf einer IP-Adresse. Der Host-Header bezeichnet dabei den Namen des Hosts, der zur Anforderung einer URL gehört. Soll die Website sowohl auf www.ihresite.de als auch auf ihresite.de reagieren, dann tragen Sie die beiden Domain-Namen als Host-Header im Dialog zur Einstellung der Eigenschaften auf dem Reiter Website über den Button Erweitert ein.

Als IP-Adresse der Site verwenden Sie dabei die Adresse des öffentlichen Interface, als Portnummer belassen Sie die Einstellung auf dem Standard-Port 80. Mit Hilfe des Host-Header ist es dann möglich, beliebig viele Sites auf der gleichen IP-Adresse bei gleichbleibendem Port zu betreiben.

Im Zuge der Einrichtung der Site haben Sie unter anderem ein Verzeichnis angegeben, in dem sich die Dateien der Site befinden. Auch alle Unterverzeichnisse dieses Verzeichnisses können dabei Dateien der Webseite beinhalten.

Wenn Sie also Ihre Seiten in das Verzeichnis kopiert und als Test die IP-Adresse 127.0.0.1 und den gewünschten Namen angegeben haben, dann können Sie Ihre Testseite im Prinzip direkt mit dem Browser abrufen: Die Eingabe des gewählten Host-Namens - also zum Beispiel http://www.IhreSite.de - reicht aus. Damit das mit der Loopback-Adresse auch funktioniert, ist lediglich noch ein Eintrag in der Datei Hosts im Verzeichnis \\WINDOWS\\SYSTEM32\\DRIVERS\\ETC notwendig:

127.0.0.1 www.ihreseite.de

Allerdings erhalten Sie dann mit ziemlich großer Sicherheit eine Fehlermeldung. Diese resultiert daraus, dass Ihre Website vermutlich noch nicht mit einer Standardseite ausgestattet ist. Wird nur die URL eines Verzeichnisses, aber kein Dateiname angegeben, so versucht der IIS, eine Standardinhaltsseite aus diesem Verzeichnis anzuzeigen. Auf den meisten Webseiten ist das eine Datei mit dem Namen index.htm: Vermutlich haben Sie eine solche Seite sogar angelegt.

Standardseiten einstellen

Das Problem ist nun, dass der IIS zwar derartige Standardinhaltsseiten erkennt und bei Bedarf ausliefert, nur ist der Name index.htm keiner der dem IIS bekannten Standardinhaltsseiten zugeordnet. Diesen Umstand können Sie aber ebenfalls auf den Eigenschaften der Website unter dem Reiter Dokumente ändern. Hier finden Sie eine erweiterbare Liste von Dateien, die der IIS in der angegebenen Reihenfolge sucht und ausliefert, wenn vom Client nur ein Verzeichnis, aber keine Datei angefordert wurde.

Nun ist es häufig so, dass verschiedene Teile einer Website von verschiedenen Abteilungen betreut werden. So kann es zum Beispiel vorkommen, dass die Eintrittsseite vom Administrator verwaltet wird, diese Seite aber Links zu verschiedenen anderen Untersites enthält. Eine dieser Untersites würde dann zum Beispiel vom Marketing, eine weitere vom Support und vielleicht eine Dritte von der Entwicklungsabteilung betreut.

In diesem Zusammenhang ist es unpraktisch, wenn alle Inhalte durch einen zentralen Administrator verwaltet werden müssten, denn in diesem Fall würde der Administrator plötzlich für die Organisation der verschiedenen Untersites verantwortlich sein. Diese können aber von den zugehörigen Abteilungen wesentlich besser betreut werden. Für solche und ähnliche Zwecke enthält der IIS ein Feature, das sich "virtuelles Verzeichnis" nennt.

Ein solches virtuelles Verzeichnis zeichnet sich durch zwei Dinge aus: Zum einen hat es einen Alias-Namen, über den der Inhalt des Verzeichnisses vom Client erreichbar ist, zum anderen muss sich die physische Position des Verzeichnisses nicht innerhalb des Basisverzeichnisses der Website befinden. Virtuelle Verzeichnisse können Sie an beliebigen Stellen innerhalb der Struktur der Website einbinden. Als Resultat wird es dadurch zum Beispiel möglich, ein virtuelles Verzeichnis mit dem Namen Produkte einzurichten, dessen Inhalt sich auf einem Server der Marketing-Abteilung befindet. Wurde dieses virtuelle Verzeichnis im Wurzelverzeichnis der Website-Struktur eingerichtet, so wird dessen Inhalt im Client-Browser dann unter der URL http://www.IhreSite.de/Produkte sichtbar.

Diese Organisationsstruktur hat zudem einen anderen Vorteil: Sie sind damit in der Lage, die Inhalte so zu verteilen, dass beim Ausfall einer Festplatte ein Umlenken auf eine andere Festplatte problemlos möglich ist. Das funktioniert auch nachträglich. Angenommen, Sie haben in Ihrer Website-Struktur ein tatsächliches Verzeichnis Marketing mit den Marketing-Informationen. Sollen diese nun an einer anderen Stelle aufbewahrt werden, so können Sie die Dateien aus diesem Verzeichnis einfach an den neuen Speicherplatz kopieren und dann ein virtuelles Verzeichnis anlegen, das auf die neue Stelle verweist.

Visual Studio: Erstellen einer ASP.NET-Anwendung

Am einfachsten erstellt man eine ASP.NET-Anwendung, indem man sie direkt von Visual Studio erzeugen lässt. Beim Anlegen einer neuen Webanwendung in Visual Studio lässt sich nämlich der Ziel-Server des Projekts festlegen. Per Default verwendet Visual Studio dabei localhost - also 127.0.0.1. Im Falle einer Webanwendung kümmert sich Visual Studio darum, alle Quellcodes, Binaries sowie HTML- und ASPX-Seiten an der richtigen Position auf dem Ziel-Server zu speichern.

Sie können die Anwendung dann auch normal debuggen: Ganz so, als handle es sich um eine lokale Windows-Client-Anwendung. Die Projektverwaltung von Visual Studio bietet dabei die Möglichkeit, eine fertige Anwendung auf einen weiteren Server zu transportieren, wobei sich nur die zum Betrieb der Site notwendigen Dateien vom Test- auf den Produktions-Server kopieren lassen: Quellcodes und temporäre Dateien werden in diesem Fall nicht mitkopiert.

Webserver extern verwalten: Terminal Services

In der Praxis wird Ihr Webserver selten die eigene Workstation sein. Stattdessen läuft der IIS meist auf einem entfernten Rechner. Das macht die Sache ein bisschen lästig, denn der direkte Kontakt zum Rechner ist dann oft eher schlecht oder nur sehr umständlich herzustellen. Dafür gibt es beim IIS verschiedene Lösungen, so zum Beispiel ein webbasiertes administratives Interface. Das ist aber nicht die beste Möglichkeit, einen auf Windows 2003 basierten Webserver zu administrieren. Deutlich besser sind da der Remote Desktop oder die Terminal Services.

Der Remote Desktop ist dabei im Wesentlichen eine eingeschränkte Version der Terminal Services, aber beide bieten den vollen Remote-Zugang zu einem Windows Server 2003: Dabei erhalten Sie einen normalen Windows-Desktop auf Ihrem lokalen Rechner, wobei der Desktop aber auf dem entfernten System betrieben wird.

Der Unterschied zwischen den Terminal-Diensten und dem Remote Desktop besteht darin, dass Sie sich per Remote Desktop nur einmal gleichzeitig am entfernten System anmelden können. Die Terminal-Dienste erlauben dagegen mehrere parallele Anmeldungen. Praktischerweise lässt sich diese Remote-Verbindung im Client so konfigurieren, dass die lokalen Laufwerke nach dem Anmelden am entfernten System auf diesem als Netzwerk-Shares zur Verfügung stehen. Damit ist der Transfer von Dateien vom lokalen auf das entfernte System also problemlos möglich.

Beim Betrieb eines IIS auf dem entfernten Windows Server 2003 sollten Sie auf jeden Fall die Basis-Firewall aktivieren. Dazu müssen Sie "Routing and Remote Access" mit Hilfe des Assistenten zur Server-Konfiguration installieren. Nach der Installation finden Sie in der Verwaltungskonsole zum "Routing and Remote Access" eine Möglichkeit, die Basis-Firewall auf dem öffentlichen Interface des Webservers zu aktivieren. Daraufhin müssen Sie allerdings noch den HTTP-Dienst zur Nutzung von außen freigeben. Wenn Sie den Remote Desktop zur Verwaltung des Rechners verwenden möchten, ist zudem das RDP-Protokoll freizugeben. Den RDP-Port sollten Sie aber noch durch zusätzliche statische Regeln oder IPSec-Filter schützen. Wie das geht, erfahren Sie in Kapitel 2.3. (mha)