Ändern von HTTP-Antwortheadern
von Ruslan Yakushev
Dieser Abschnitt der Dokumentation bezieht sich auf URL Rewrite in der Modulversion 2.0 für IIS 7.
Diese exemplarische Vorgehensweise führt Sie durch die Verwendung von URL-Rewrite-Modul Version 2.0 zum Festlegen von HTTP-Antwortheadern.
Voraussetzungen
Für diese exemplarische Vorgehensweise wird Folgendes vorausgesetzt:
- IIS 7 oder höher mit aktiviertem ASP.NET-Rollendienst;
- URL-Rewrite-Modul 2.0 Release Candidate installiert;
- Exemplarische Vorgehensweise Reverseproxy mit URL Rewrite v2 und Anwendungsanforderungsrouting abgeschlossen.
Einführung
Das URL-Rewrite-Modul 2.0 bietet Unterstützung für das regelbasierte Umschreiben der HTTP-Header der Antwort. Ein sehr häufiges Anwendungsszenario für das Festlegen der Antwortheader ist die Änderung der Umleitungsantwort, die von einer Anwendung hinter einem Lastenausgleich oder einem Reverseproxy erzeugt wird. Wenn beispielsweise eine Anwendung hinter einem Reverseproxy eine Umleitungsantwort zurückgibt, bildet der HTTP-Speicherortheader in der Antwort möglicherweise nicht die internetgerichtete Adresse, sondern eine interne Anwendungsadresse ab. URL-Rewrite-Module 2.0 kann auf dem Reverseproxyserver verwendet werden, um den Speicherortheader in der Antwort zu ändern. Das Szenario ist in der folgenden Grafik dargestellt:
- Ein HTTP-Client sendet eine Anforderung an eine Webseite
http://www.contoso.com/webmail/oldpage.aspx
. - Der Reverseproxyserver verwendet URL Rewrite 2.0 und das Anwendungsanforderungsrouting, um die Anforderung basierend auf dem Namen des Ordners im angeforderten URL-Pfad an einen internen Inhaltsserver weiterzuleiten. Beispiel:
http://webmail/oldpage.aspx
; - Die Webanwendung, die auf dem Inhaltsserver ausgeführt wird, gibt eine Umleitungsantwort (HTTP/1.1 301) aus, die einen HTTP-Client auf
http://webmail/newpage.aspx
verweist; - Der Reverseproxyserver verwendet URL Rewrite 2.0, um den internen Umleitungsspeicherort in der Antwort durch den Umleitungsspeicherort im Internet zu ersetzen:
http://www.contoso.com/webmail/newpage.aspx
.
Einrichten eines Szenarios für die exemplarische Vorgehensweise
Führen Sie zum Einrichten des exemplarischen Szenarios die exemplarische Vorgehensweise Reverseproxy mit URL Rewrite v2 und Anwendungsanforderungsrouting aus. Am Ende dieser exemplarischen Vorgehensweise sollten Sie über eine Reverseproxywebsite verfügen, die Anforderungen an zwei Inhaltsanwendungen weiterleitet: Webmail und Lohnbuchhaltung.
Für diese exemplarische Vorgehensweise müssen Sie der Webmailanwendung eine Umleitungslogik hinzufügen. In einem realen Szenario wäre das wahrscheinlich eine Umleitung, die durch den Code der Webanwendung initiiert wird. Der Einfachheit halber verwenden Sie in dieser Anleitung jedoch eine Umleitungsregel im URL-Rewrite-Modul.
Erstellen Sie eine Datei mit dem Namen „web.config“ im folgenden Ordner:
%SystemDrive%\inetpub\webmail
Öffnen Sie die Datei in einem Text-Editor, fügen Sie den folgenden XML-Code ein, und speichern Sie die Datei:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="Redirect" stopProcessing="true"> <match url="^index\.aspx$" /> <action type="Redirect" url="default.aspx" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
Dies ist eine Regel, die alle Anforderungen für „index.aspx“ an „default.aspx“ umleitet.
Öffnen Sie einen Webbrowser und senden Sie eine Anforderung an http://localhost/webmail/index.aspx
. Wie Sie sehen, wurde der Browser auf http://localhost:8081/default.aspx
umgeleitet, was im Grunde eine interne URL ist, die von der Webmail-Webanwendung verwendet wird. Jetzt konfigurieren Sie die URL-Rewrite-Regeln, um den HTTP-Speicherortheader in den HTTP-Umleitungsantworten so zu ändern, dass der Browser zu einer richtigen URL umgeleitet wird: http://localhost/webmail/default.aspx
.
Ändern der Eingangsregel zum Beibehalten des Hostheaders
Um den HTTP-Speicherortheader ändern zu können, muss der ursprüngliche Wert des HTTP-Hostheaders gespeichert werden. Die Rewrite-Ausgangsregel verwendet beim Ändern der Antwort den gespeicherten Wert. Zu diesem Zweck speichern Sie den ursprünglichen Wert in der temporären Servervariablen ORIGINAL_HOST.
- Wählen Sie auf der Hauptseite der URL-Umschreibungsfunktion im Bereich Aktionen auf der rechten Seite die Option Servervariablen anzeigen aus:
- Wählen Sie auf der Seite Zulässige Servervariablen die Option Hinzufügen und geben Sie dann den Namen der Servervariablen ein, die zur vorübergehenden Speicherung des Wertes des HTTP-Hostheaders verwendet werden soll. Zum Beispiel ORIGINAL_HOST:
- Wählen Sie OK aus, um die Änderungen zu speichern, und kehren Sie dann zur Hauptseite von URL Rewrite zurück. Wählen Sie anschließend die Eingangsregel „Reverseproxy zu Webmail“ aus und klicken Sie auf Bearbeiten.
- Erweitern Sie auf der Seite Eingangsregel bearbeiten das Gruppenfeld „Servervariablen“, wählen Sie Hinzufügen aus und geben Sie als Namen der Servervariablen „ORIGINAL_HOST“ und als Wert „{HTTP_HOST}“ ein:
Erstellen einer Ausgangsregel zum Ändern des HTTP-Antwortheaders
Jetzt erstellen Sie eine Rewrite-Ausgangsregel, die den HTTP-Speicherortheader in Umleitungsantworten umschreibt, um den Anwendungsordner wieder in den URL-Pfad aufzunehmen und den Hostnamen zu ersetzen.
- Wählen Sie auf der Hauptseite der URL-Rewrite-Funktion die Option „Regeln hinzufügen“ und dann in der Kategorie „Ausgangsregeln“ die Option „Leere Regel“.
- Geben Sie der Regel auf der Seite „Ausgangsregel bearbeiten“ den Namen „Rewrite Location Header“.
- Wählen Sie in der Dropdownliste „Vorbedingung“ die Option „<Neue Vorbedingung erstellen>“ aus.
- Geben Sie der Vorbedingung im Dialogfeld „Vorbedingung hinzufügen“ den Namen „IsRedirection“.
- Wählen Sie „Hinzufügen“ aus, und geben Sie dann {RESPONSE_STATUS} als Bedingungseingabe und „3\d\d“ als Muster ein. Diese Vorbedingung wird verwendet, um zu prüfen, ob die Antwort einen Umleitungsstatuscode wie 301, 302, 307 usw. hat. Das Vorbedingungsdialogfeld sollte ungefähr wie folgt aussehen:
- Wählen Sie OK aus, um zur Seite Ausgangsregel bearbeiten zurückzukehren.
- Verwenden Sie im Gruppenfeld Abgleichen die Dropdownliste Übereinstimmungsbereich, um die Servervariable auszuwählen.
- Geben Sie RESPONSE_Location für „Variablenname“ und „^http://[^/]+/(.*)“ für „Muster“ ein. Damit wird die Regel so konfiguriert, dass sie mit dem HTTP-Antwortheader „Location“ arbeitet und dessen Wert mit einem Regex-Muster abgleicht, das den URL-Pfad in einem Rückverweis speichert.
- Erweitern Sie das Gruppenfeld „Bedingungen“, wählen Sie “Hinzufügen“ aus, und geben Sie {ORIGINAL_HOST} als Bedingungseingabe und „.+“ als Bedingungsmuster ein. Diese Bedingung überprüft, ob die temporäre Servervariable ORIGINAL_HOST vorhanden ist und einen nicht leeren Wert aufweist.
- Wählen Sie abermals „Hinzufügen“ aus, und fügen Sie eine weitere Bedingung hinzu. Legen Sie die Bedingungseingabe auf {URL} und das Muster auf „^/(webmail|payroll)/.*“ fest. Dieser reguläre Ausdruck wird verwendet, um die URL-Pfade abzugleichen, die entweder mit /webmail oder /payroll beginnen. Außerdem fängt die Klammer innerhalb des Musters den Teil der übereinstimmenden URL-Zeichenfolge ab, so dass er bei der Konstruktion der Ersatz-URL wiederverwendet werden kann.
- Wählen Sie schließlich im Gruppenfeld „Aktion“ die Aktion „Umschreiben“ aus, und geben Sie „
http://{ORIGINAL_HOST}/{C:1}/{R:1}
“ als Wert ein. Diese Aktion ersetzt den Wert des HTTP-Speicherortheaders durch eine Zeichenfolge, die aus dem Hostnamen aus der Servervariablen, dem Rückverweis der Bedingung, die das Präfix des URL-Pfads enthält, und dem Rückverweis der Regel, die den aktuellen URL-Pfad im Speicherortheader enthält, gebildet wird.
Die fertige Seite sollte wie folgt aussehen:
Testen der Regel
Um zu testen, dass alle Regeln ordnungsgemäß funktionieren, öffnen Sie einen Webbrowser, und stellen Sie eine Anforderung an http://localhost/webmail/index.aspx
. Der Browser sollte umgeleitet werden zu http://localhost/webmail/default.aspx
:
Zusammenfassung
In dieser exemplarischen Vorgehensweise:
- Sie haben erfahren, wie Sie mehrere neue Features in URL Rewrite 2.0 verwenden, um ein voll funktionsfähiges Reverseproxyszenario zu implementieren.
- Sie haben die Eingangsregel so konfiguriert, dass die Anforderungen an einen Back-End-Inhaltsserver weitergeleitet und eine temporäre Servervariable festgelegt wird.
- Anschließend haben Sie eine Ausgangsregel definiert, die den HTTP-Speicherortheader in der von der Webanwendung vom Back-End-Inhaltsserver generierten Umleitungsantwort ändert.