Verwendung von Failed Request Tracing (FRT) zur Ablaufverfolgung von Umschreibungsregeln
von Ruslan Yakushev
Die Ablaufverfolgung für Anforderungsfehler (Failed Request Tracing; FRT) ein leistungsfähiges Tool zur Behebung von Fehlern bei der Anforderungsverarbeitung in IIS 7.0 und höher. FRT kann zusammen mit dem URL-Rewrite-Modul verwendet werden, um nachzuvollziehen, wie die Umschreibungsregeln auf die Anforderungs-URL angewendet wurden. Diese exemplarische Vorgehensweise führt Sie durch die Verwendung von FRT zur Problembehandlung und zum Debuggen von URL-Umschreibungsregeln. Weitere Informationen zur Ablaufverfolgung für Anforderungsfehler (Failed Request Tracing, FRT) finden Sie in diesem Artikel.
Voraussetzungen
Für diese exemplarische Vorgehensweise wird Folgendes vorausgesetzt:
- IIS 7.0 oder höher mit ASP.NET und aktivierten Rollendiensten zur Ablaufverfolgung
- Installiertes Go Live-Release des URL-Rewrite-Moduls
Einrichten einer Testwebseite
Zur Veranschaulichung der Funktionsweise des URL-Rewrite-Moduls verwenden wir eine einfache ASP.NET-Testseite. Diese Seite liest die Webservervariablen und gibt ihre Werte im Browser aus.
Kopieren Sie den folgenden ASP.NET-Code in eine Datei namens „article.aspx“ im Ordner %SystemDrive%\inetpub\wwwroot\
:
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>URL Rewrite Module Test</title>
</head>
<body>
<h1>URL Rewrite Module Test Page</h1>
<table>
<tr>
<th>Server Variable</th>
<th>Value</th>
</tr>
<tr>
<td>Original URL: </td>
<td><%= Request.ServerVariables["HTTP_X_ORIGINAL_URL"] %></td>
</tr>
<tr>
<td>Final URL: </td>
<td><%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td>
</tr>
</table>
</body>
</html>
Navigieren Sie nach dem Kopieren dieser Datei zu http://localhost/article.aspx
, und überprüfen Sie, ob die Seite korrekt in einem Browser gerendert wurde.
Konfigurieren von Umschreibungsregeln
Suchen Sie eine „web.config“-Datei im Ordner %SystemDrive%\inetpub\wwwroot\
, oder erstellen Sie eine Datei, wenn sie nicht vorhanden ist. Öffnen Sie die Datei „web.config“, und fügen Sie den folgenden Abschnitt innerhalb des <system.webServer>
-Elements hinzu:
<rewrite>
<rules>
<rule name="Fail bad requests">
<match url="." />
<conditions>
<add input="{HTTP_HOST}" negate="true" pattern="localhost" />
</conditions>
<action type="AbortRequest" />
</rule>
<rule name="Rewrite to article.aspx">
<match url="^article/([0-9]+)/([_0-9a-z-]+)" />
<action type="Rewrite" url="article.aspx?id={R:1}&title={R:2}" />
</rule>
</rules>
</rewrite>
- Die Regel „Fail bad requests“ (Fehlerhafte Anforderungen abbrechen) bricht die HTTP-Verbindung ab, wenn der Hostheader der HTTP-Anforderung nicht mit „localhost“ übereinstimmt.
- Die Regel „Rewrite to article.aspx“ schreibt die URLs von diesem Format
http://localhost/article/234/some-title
in dieses Formathttp://localhost/article.aspx?id=234&title=some-title
um.
Überprüfen Sie, ob die Regeln korrekt konfiguriert sind, indem Sie einen Browser öffnen und eine Anforderung an http://localhost/article/234/some-title
stellen. Wenn die Regeln korrekt eingerichtet wurden, sollten Sie die folgende Antwort im Browser sehen:
Konfigurieren der Ablaufverfolgung für Anforderungsfehler
Aktivieren Sie nun die Ablaufverfolgung für Anforderungsfehler (FRT) für eine „Standardwebsite“ (in diesem Artikel finden Sie eine detaillierte Anleitung zur Aktivierung von FRT). Nachdem Sie die Ablaufverfolgung für Anforderungsfehler aktiviert haben, erstellen wir eine URL-Rewrite-Modul-spezifische FRT-Regel für die Ablaufverfolgung von Ereignissen.
Führen Sie die folgenden Schritte aus, um eine FRT-Regel im IIS-Manager zu erstellen:
- Klicken Sie auf das Symbol „FRT-Regeln“, um zur Liste der FRT-Regeln zu gelangen.
- Klicken Sie auf die Aktion „Hinzufügen...“, um den Assistenten für die Erstellung von FRT-Regeln aufzurufen.
- Wählen Sie auf der ersten Seite des Assistenten „Alle Inhalte (*)“ aus.
- Klicken Sie auf „Weiter“, und geben Sie den oder die Statuscode(s) in der Form „200-399“ ein.
- Klicken Sie auf „Weiter“, und deaktivieren Sie dann alle Ablaufverfolgungsanbieter mit Ausnahme von „WWW-Server“. Deaktivieren Sie dann alle Anbieterbereiche außer „Umschreiben“.
- Klicken Sie auf „Fertig stellen“, um die FRT-Regel zu speichern.
Wenn die Ablaufverfolgung für Anforderungsfehler nach dem Umschreiben des URL-Moduls installiert wurde, ist der Bereich „Umschreiben“ in „Ablaufverfolgungsanbieter“ möglicherweise nicht verfügbar. Wenn der Bereich „Umschreiben“ dort nicht aufgeführt ist, gehen Sie zu „Programme hinzufügen/entfernen“ und führen Sie das Installationsprogramm für das URL-Rewrite-Modul im Reparaturmodus aus.
Analysieren der FRT-Protokolldatei
Nachdem die FRT-Regel erstellt wurde, stellen Sie eine Anforderung an http://localhost/article/234/some-title
. Dadurch wird ein FRT-Protokoll in %SystemDrive%\inetpub\Logs\FailedReqLogFiles\
erstellt. Sie können dieses Protokoll mit dem Internet Explorer öffnen. Es wird als HTML-Dokument dargestellt, das Sie leicht durchsuchen können. Im Folgenden finden Sie ein Beispiel für die URL-Umschreibereignisse, die in der Protokolldatei der Ablaufverfolgung zu finden sind:
Diese Ereignisse zeigen, wie die Umschreibungsregeln ausgewertet wurden, und wie die angeforderte URL durch das Rewrite-Modul geändert wurde. Sehen wir uns einige der Ereignisse an, um die Regelauswertungslogik besser zu verstehen:
URL_REWRITE_START – Dieses Ereignis zeigt den Start der URL-Umschreibereignisse an. Die Ereigniseigenschaften liefern die folgenden Informationen:
- Die Eingabe-URL-Zeichenfolge lautet „/article/234/some-title“.
- Es gab keine Abfragezeichenfolge.
- Scope="Distributed" gibt an, dass Regeln lokal sind (d. h., die Regeln werden in der Web.config für die Website definiert) im Gegensatz zu global (d. h. auf Serverebene definiert).
RULE_EVALUATION_START – Dieses Ereignis markiert den Anfang der Regelauswertungslogik. Die Ereigniseigenschaften liefern die folgenden Informationen:
- Die Regel verwendet reguläre Ausdrücke für die Mustersyntax (patternSyntax="ECMAScript").
- Nachfolgende Regeln werden ausgewertet (StopProcessing = "false").
- Die Regel wird auf der Websitestammebene definiert (RelativePath = "/").
PATTERN_MATCH – Dieses Ereignis enthält Informationen dazu, wie die URL mit dem Regelmuster abgeglichen wurde. Die Ereigniseigenschaften liefern die folgenden Informationen:
- Das Regelmuster war "." (das heißt, entspricht einem beliebigen Zeichen).
- Die Eingabe-URL entsprach dem Muster.
CONDITIONS_EVALUATION_START – Da die Eingabe-URL mit dem Muster übereinstimmte, wurde die Auswertung der Bedingungen gestartet.
CONDITION_EVALUATION – Dieses Ereignis enthält die folgenden Informationen:
- Der Wert von HTTP_HOST war „localhost“ und entspricht dem Muster.
- Da die Negation der Bedingung in der Regel angegeben wurde (d. h. Negated="true"), war die Auswertung der Bedingung nicht erfolgreich.
CONDITIONS_EVALUATION_END – Dieses Ereignis zeigt, dass die Auswertung von Bedingungen für diese Regel nicht erfolgreich war.
RULE_EVALUATION_END – Dieses Ereignis zeigt, dass die Regel die URL nicht geändert hat (Succeeded="false"). Dies liegt daran, dass die Regelbedingungsauswertung fehlgeschlagen ist.
RULE_EVALUATION_START – Dieses Ereignis zeigt, dass die URL-Zeichenfolge an die zweite Regel übergeben wurde.
PATTERN_MATCH – Dieses Ereignis enthält Informationen dazu, wie die URL mit dem Regelmuster abgeglichen wurde. Die Ereigniseigenschaften liefern die folgenden Informationen:
- Das Regelmuster lautete: „^article/([0-9]+)/([0-9a-z]+)“.
- Die Eingabe-URL entsprach dem Muster.
REWRITE_ACTION – Dieses Ereignis gibt an, dass die Regelauswertung erfolgreich war und die URL in „/article.aspx“ mit der Abfragezeichenfolge „id=234&title=some-title“ umgeschrieben wurde.
Zusammenfassung
Die von FRT protokollierten URL-Umschreibereignisse liefern sehr detaillierte Informationen, die für die Fehlersuche und das Debugging von URL-Umschreibungsregeln verwendet werden können, aber auch um zu verstehen, wie die Logik der Regelauswertung auf einen URL-String angewendet wird.