실패 요청 추적을 사용하여 재작성 규칙 추적

루슬란 야쿠셰프

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

사전 요구 사항

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

  1. ASP.NET 및 "추적" 역할 서비스를 사용하도록 설정된 IIS 7.0 이상
  2. URL 다시 쓰기 Go Live 릴리스 설치됨

테스트 웹 페이지 설정

URL 다시 쓰기 모듈의 작동 방식을 설명하기 위해 간단한 테스트 ASP.NET 페이지를 사용합니다. 이 페이지는 웹 서버 변수를 읽고 브라우저에서 해당 값을 출력합니다.

다음 ASP.NET 코드를 복사하여 %SystemDrive%\inetpub\wwwroot\ 폴더에 article.aspx라는 이름의 파일로 저장합니다.

<%@ 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 페이지가 올바르게 렌더링되었는지 확인합니다.

웹 브라우저를 통해 문서 페이지에 액세스하는 스크린샷

다시 쓰기 규칙 구성

폴더에서 %SystemDrive%\inetpub\wwwroot\ web.config 파일을 찾거나 파일이 없으면 만듭니다. 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-title에서 이 형식 http://localhost/article.aspx?id=234&title=some-title으로 다시 작성합니다.

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

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

실패한 요청 추적 설정

이제 "기본 웹 사이트"에 대해 실패한 요청 추적을 사용하도록 설정합니다(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\. Internet 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 다시 쓰기 규칙의 문제 해결 및 디버깅에 사용할 수 있는 매우 자세한 정보를 제공합니다.