Share via


실패한 요청 추적을 사용하여 다시 쓰기 규칙 추적

작성자 : Ruslan Yakushev

IIS 7.0 이상 FRT(실패한 요청 추적)는 요청 처리 실패 문제를 해결하기 위한 강력한 도구입니다. FRT를 URL 다시 쓰기 모듈과 함께 사용하여 요청 URL에 다시 쓰기 규칙이 적용된 방법을 추적할 수 있습니다. 이 연습에서는 FRT를 사용하여 URL 다시 쓰기 규칙의 문제를 해결하고 디버그하는 방법을 안내합니다. 실패한 요청 추적에 대한 자세한 내용은 이 문서를 참조하세요.

사전 요구 사항

이 연습을 수행하려면 다음 필수 구성 요소가 필요합니다.

  1. ASP.NET 및 "추적" 역할 서비스를 사용하도록 설정된 IIS 7.0 이상
  2. 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}&amp;title={R:2}" />
        </rule>
      </rules>
</rewrite>
  • HTTP 요청의 호스트 헤더가 "localhost"에 맞지 않으면 "잘못된 요청 실패" 규칙이 HTTP 연결을 중단합니다.
  • "article.aspx로 다시 쓰기" 규칙은 이 형식의 URL을 이 형식 http://localhost/article/234/some-titlehttp://localhost/article.aspx?id=234&title=some-title으로 다시 작성합니다.

브라우저를 열고 을 요청하여 규칙이 올바르게 구성되었는지 확인합니다 http://localhost/article/234/some-title. 규칙이 올바르게 설정되면 브라우저에 다음 응답이 표시됩니다.

원래 U R L 및 다시 작성된 버전을 표시하는 U RL 다시 쓰기 모듈 테스트 페이지의 스크린샷.

실패한 요청 추적 구성

이제 "기본 웹 사이트"에 실패한 요청 추적을 사용하도록 설정합니다(FRT를 사용하도록 설정하는 방법에 대한 단계별 지침은 이 문서를 참조하세요). 실패한 요청 추적을 사용하도록 설정하면 URL 다시 쓰기 모듈과 관련된 이벤트를 추적하기 위한 FRT 규칙을 만듭니다.

IIS 관리자에서 FRT 규칙을 만들려면 다음 단계를 수행합니다.

  1. "실패한 요청 추적 규칙" 아이콘을 클릭하여 FRT 규칙 목록으로 가져옵니다.
    실패한 요청 추적 규칙이 선택된 기본 웹 사이트 홈 창의 스크린샷.
  2. "추가..."를 클릭합니다. 작업을 수행하여 FRT 규칙 만들기 마법사를 표시합니다. 모든 콘텐츠(별표)가 선택된 실패한 요청 추적 규칙 추가 대화 상자의 스크린샷
  3. 마법사의 첫 번째 페이지에서 "모든 콘텐츠(*)"를 선택합니다.
  4. "다음"을 클릭하고 상태 코드를 "200-399"로 지정합니다.
    상태 코드를 200 대시 399 값으로 설정하는 스크린샷
  5. 다음을 클릭한 다음 "WWW Server"를 제외한 모든 추적 공급자의 선택을 취소한 다음 "다시 쓰기"를 제외한 모든 공급자 영역의 선택을 취소합니다. 공급자를 W W W 서버로만 설정하고 영역만 다시 쓰기로 설정하는 스크린샷
  6. 마침을 클릭하여 FRT 규칙을 저장합니다.

URL 다시 쓰기 모듈 후에 실패한 요청 추적이 설치된 경우 추적 공급자의 "다시 쓰기" 영역을 사용할 수 없습니다. 나열된 "다시 쓰기" 영역이 표시되지 않으면 프로그램 추가/제거로 이동한 다음 복구 모드에서 URL 다시 쓰기 모듈 설치 관리자를 실행합니다.

실패한 요청 추적 로그 파일 분석

FRT 규칙을 만든 후 에 요청합니다 http://localhost/article/234/some-title. 그러면 에서 FRT 로그가 생성됩니다 %SystemDrive%\inetpub\Logs\FailedReqLogFiles\. 인터넷 Explorer 사용하여 이 로그를 열 수 있으며 쉽게 검색할 수 있는 HTML 문서로 렌더링됩니다. 다음은 추적 로그 파일에서 찾을 수 있는 특정 이벤트를 다시 쓰는 URL의 예입니다.

웹 브라우저를 사용하여 F R T 로그에 액세스하는 스크린샷 로그에는 다시 쓰기 규칙 목록과 다시 쓰기 논리가 표시됩니다.

이러한 이벤트는 다시 쓰기 규칙이 평가된 방법과 다시 쓰기 모듈에서 요청된 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 문자열에 적용되는 방식을 이해하는 데도 사용할 수 있습니다.