IIS 7.0 이상 FRT(실패한 요청 추적)는 요청 처리 실패 문제를 해결하기 위한 강력한 도구입니다. FRT를 URL 다시 쓰기 모듈과 함께 사용하여 요청 URL에 다시 쓰기 규칙이 적용된 방법을 추적할 수 있습니다. 이 연습에서는 FRT를 사용하여 URL 다시 쓰기 규칙의 문제를 해결하고 디버그하는 방법을 안내합니다. 실패한 요청 추적에 대한 자세한 내용은 이 문서를 참조하세요.
사전 요구 사항
이 연습을 수행하려면 다음 필수 구성 요소가 필요합니다.
- ASP.NET 및 "추적" 역할 서비스를 사용하도록 설정된 IIS 7.0 이상
- URL 다시 쓰기 Go Live 릴리스 설치됨
테스트 웹 페이지 설정
URL 다시 쓰기 모듈의 작동 방식을 설명하기 위해 간단한 테스트 ASP.NET 페이지를 사용합니다. 이 페이지는 웹 서버 변수를 읽고 브라우저에서 해당 값을 출력합니다.
다음 ASP.NET 코드를 복사하여 article.aspx라는 파일의 폴더에 넣 %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>
이 파일을 복사한 후 브라우저에서 http://localhost/article.aspx
페이지가 올바르게 렌더링되었는지 찾아서 검사.
다시 쓰기 규칙 구성
폴더에서 web.config 파일을 %SystemDrive%\inetpub\wwwroot\
찾거나 파일이 없으면 만듭니다. web.config 파일을 열고 요소 내에 다음 섹션을 추가합니다 <system.webServer>
.
<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>
- HTTP 요청의 호스트 헤더가 "localhost"에 맞지 않으면 "잘못된 요청 실패" 규칙이 HTTP 연결을 중단합니다.
- "article.aspx로 다시 쓰기" 규칙은 이 형식의 URL을 이 형식
http://localhost/article/234/some-title
http://localhost/article.aspx?id=234&title=some-title
으로 다시 작성합니다.
브라우저를 열고 을 요청하여 규칙이 올바르게 구성되었는지 확인합니다 http://localhost/article/234/some-title
. 규칙이 올바르게 설정되면 브라우저에 다음 응답이 표시됩니다.
실패한 요청 추적 구성
이제 "기본 웹 사이트"에 실패한 요청 추적을 사용하도록 설정합니다(FRT를 사용하도록 설정하는 방법에 대한 단계별 지침은 이 문서를 참조하세요). 실패한 요청 추적을 사용하도록 설정하면 URL 다시 쓰기 모듈과 관련된 이벤트를 추적하기 위한 FRT 규칙을 만듭니다.
IIS 관리자에서 FRT 규칙을 만들려면 다음 단계를 수행합니다.
- "실패한 요청 추적 규칙" 아이콘을 클릭하여 FRT 규칙 목록으로 가져옵니다.
- "추가..."를 클릭합니다. 작업을 수행하여 FRT 규칙 만들기 마법사를 표시합니다.
- 마법사의 첫 번째 페이지에서 "모든 콘텐츠(*)"를 선택합니다.
- "다음"을 클릭하고 상태 코드를 "200-399"로 지정합니다.
- 다음을 클릭한 다음 "WWW Server"를 제외한 모든 추적 공급자의 선택을 취소한 다음 "다시 쓰기"를 제외한 모든 공급자 영역의 선택을 취소합니다.
- 마침을 클릭하여 FRT 규칙을 저장합니다.
URL 다시 쓰기 모듈 후에 실패한 요청 추적이 설치된 경우 추적 공급자의 "다시 쓰기" 영역을 사용할 수 없습니다. 나열된 "다시 쓰기" 영역이 표시되지 않으면 프로그램 추가/제거로 이동한 다음 복구 모드에서 URL 다시 쓰기 모듈 설치 관리자를 실행합니다.
실패한 요청 추적 로그 파일 분석
FRT 규칙을 만든 후 에 요청합니다 http://localhost/article/234/some-title
. 그러면 에서 FRT 로그가 생성됩니다 %SystemDrive%\inetpub\Logs\FailedReqLogFiles\
. 인터넷 Explorer 사용하여 이 로그를 열 수 있으며 쉽게 검색할 수 있는 HTML 문서로 렌더링됩니다. 다음은 추적 로그 파일에서 찾을 수 있는 특정 이벤트를 다시 쓰는 URL의 예입니다.
이러한 이벤트는 다시 쓰기 규칙이 평가된 방법과 다시 쓰기 모듈에서 요청된 URL을 수정한 방법을 보여 줍니다. 규칙 평가 논리를 더 잘 이해하기 위해 몇 가지 이벤트를 살펴보겠습니다.
URL_REWRITE_START - 이 이벤트는 URL 다시 쓰기 이벤트의 시작을 나타냅니다. 이벤트 속성은 다음 정보를 제공합니다.
- 입력 URL 문자열은 "/article/234/some-title"입니다.
- 쿼리 문자열이 없습니다.
- Scope="Distributed"는 규칙이 전역(즉, 서버 수준에서 정의됨)이 아닌 로컬(즉, 사이트의 Web.config 정의됨)임을 나타냅니다.
RULE_EVALUATION_START - 이 이벤트는 규칙 평가 논리의 시작을 나타냅니다. 이벤트 속성은 다음 정보를 제공합니다.
- 규칙은 패턴 구문에 정규식을 사용합니다(patternSyntax="ECMAScript").
- 후속 규칙이 평가됩니다(StopProcessing = "false")
- 규칙은 사이트 루트 수준에서 정의됩니다(RelativePath = "/").
PATTERN_MATCH - 이 이벤트는 URL이 규칙 패턴과 일치하는 방법에 대한 정보를 제공합니다. 이벤트 속성은 다음 정보를 제공합니다.
- 규칙 패턴은 ""입니다. (즉, 모든 문자와 일치)
- 입력 URL이 패턴과 일치했습니다.
CONDITIONS_EVALUATION_START - 입력 URL이 조건 평가가 시작된 패턴과 일치하므로
CONDITION_EVALUATION - 이 이벤트는 다음 정보를 제공합니다.
- HTTP_HOST 값은 "localhost"이고 패턴과 일치했습니다.
- 규칙(예: Negated="true")에 조건 부정이 지정되었으므로 조건 평가가 성공하지 못했습니다.
CONDITIONS_EVALUATION_END - 이 이벤트는 이 규칙의 조건 평가가 성공하지 못했음을 보여줍니다.
RULE_EVALUATION_END - 이 이벤트는 규칙이 URL(Succeeded="false")을 수정하지 않았음을 보여 줍니다. 규칙 조건 평가가 실패했기 때문입니다.
RULE_EVALUATION_START - URL 문자열이 두 번째 규칙에 전달되었음을 표시합니다.
PATTERN_MATCH - 이 이벤트는 URL이 규칙 패턴과 일치하는 방법에 대한 정보를 제공합니다. 이벤트 속성은 다음을 알려줍니다.
- 규칙 패턴은 "^article/([0-9]+)/([0-9a-z]+)"입니다.
- 입력 URL이 패턴과 일치했습니다.
REWRITE_ACTION - 이 이벤트는 규칙 평가가 성공했으며 쿼리 문자열 "id=234&title=some-title"을 사용하여 URL을 "/article.aspx"로 다시 작성했음을 나타냅니다.
요약
FRT에서 기록된 URL 재작성 특정 이벤트는 URL 다시 쓰기 규칙의 문제 해결 및 디버깅에 사용할 수 있는 매우 자세한 정보를 제공할 뿐만 아니라 규칙 평가 논리가 URL 문자열에 적용되는 방식을 이해하는 데도 사용할 수 있습니다.