로 루슬란 야쿠셰프
설명서의 이 섹션은 IIS 7용 URL 다시 쓰기 모듈 버전 2.0에 적용됩니다.
이 연습에서는 웹 페이지에 웹 분석 추적 스크립트를 삽입하는 IIS 아웃바운드 다시 쓰기 규칙을 만드는 방법을 안내합니다.
필수 조건
이 연습을 실행하려면 다음이 있어야 합니다.
- URL 다시 쓰기 모듈 2.0 RCrelease가 설치되었습니다.
소개
웹 분석 서비스의 목적은 웹 사이트 게시자에게 사이트 방문자에 대한 통계 정보를 제공하는 것입니다. 이 정보는 사이트 게시자가 고객 만족도 및 ROI를 높이기 위해 콘텐츠, 광고 및 서비스 제품을 최적화하는 데 도움이 됩니다. 일반적으로 Google Analytics 또는 Omniture와 같은 온라인 웹 분석 서비스는 웹 사이트 방문자에 대한 데이터를 수집하여 작동합니다. 사이트 소유자가 보고서를 요청하면 웹 분석 공급자는 이 데이터를 처리하고 편리하고 이해하기 쉬운 형식으로 사이트 소유자에게 제공합니다. 분석에 필요한 데이터 수집을 사용하도록 설정하려면 웹 사이트 소유자는 웹 분석 서비스 공급자가 발급한 추적 스크립트를 사용하여 웹 사이트의 모든 페이지를 계측해야 합니다.
경우에 따라 추적 코드를 웹 페이지에 추가하는 것은 간단한 작업입니다. 그러나 대부분의 경우 스크립트를 여러 웹 페이지에 수동으로 추가해야 할 수 있습니다. 이러한 경우 웹 분석 계측은 비용이 많이 들고 시간이 많이 걸리는 작업이 됩니다. URL 재작성 모듈 버전 2의 응답 다시 쓰기 기능은 즉시 응답 콘텐츠를 변경하는 아웃바운드 규칙을 실행하여 이러한 상황에 도움이 될 수 있습니다.
아웃바운드 다시 쓰기 규칙 만들기
시작하려면 HTML 응답에 JavaScript 코드 조각을 추가하는 아웃바운드 다시 쓰기 규칙을 만듭니다. 코드 조각은 다음 그림과 같이 닫는 </body> 태그 바로 앞에 삽입됩니다.
...
<script type='text/javascript'>
//Your web analytics tracking code goes here...
</script>
</body>
경고: 이 특정 예제에서 JavaScript 코드는 신뢰할 수 있는 소스에서 온 것으로 간주되며 HTML 페이지에 있는 그대로 삽입되어야 합니다. 응답 헤더 또는 응답 콘텐츠가 아웃바운드 다시 쓰기 규칙에 의해 수정되는 경우 응답에 삽입되는 텍스트에 클라이언트 쪽 실행 코드가 포함되어 있지 않아 사이트 간 스크립팅 취약성이 발생할 수 있으므로 주의해야 합니다. 이는 다시 쓰기 규칙이 HTTP 헤더 또는 쿼리 문자열과 같은 신뢰할 수 없는 데이터를 사용하여 HTTP 응답에 삽입될 문자열을 빌드하는 경우에 특히 중요합니다. 이러한 경우 HtmlEncode 함수를 사용하여 대체 문자열을 HTML로 인코딩해야 합니다. 예를 들면 다음과 같습니다.
<action type="Rewrite" value="{HtmlEncode:{HTTP_REFERER}}" />
아웃바운드 규칙을 만들려면:
- IIS 관리자 열기
- "기본 웹 사이트"를 선택합니다.
- 기능 보기에서 "URL 다시 쓰기 모듈"을 선택합니다.
- 오른쪽의 작업 창에서 "규칙 추가..."를 클릭합니다. "규칙 추가" 대화 상자의 "아웃바운드 규칙" 범주에서 "빈 규칙"을 선택하고 확인을 클릭합니다.
이제 실제 아웃바운드 규칙을 정의해야 합니다. URL 다시 쓰기 모듈 2.0에서 아웃바운드 다시 쓰기 규칙은 다음 정보를 지정하여 정의됩니다.
- 규칙의 이름입니다.
- 이 규칙을 응답에 적용해야 하는지 여부를 제어하는 선택적 사전 조건입니다.
- 응답에서 문자열을 일치시키는 데 사용할 패턴입니다.
- 선택적 조건 집합입니다.
- 패턴이 일치하고 모든 조건 검사가 성공했는지를 수행할 작업입니다.
규칙 이름 지정
"이름" 텍스트 상자에 규칙을 고유하게 식별하는 이름(예: "추적 스크립트 추가")을 입력합니다.
사전 조건 정의
사전 조건은 응답에서 아웃바운드 규칙 평가를 수행해야 하는지 여부를 평가하는 데 사용됩니다. 예를 들어 HTML 콘텐츠를 수정하는 규칙의 경우 콘텐츠 형식 헤더가 "text/html"로 설정된 HTTP 응답만 이 규칙에 대해 평가해야 합니다. 아웃바운드 규칙 평가 및 콘텐츠 다시 쓰기는 웹 애플리케이션의 성능에 부정적인 영향을 줄 수 있는 CPU 집약적 작업입니다. 따라서 사전 조건을 사용하여 아웃바운드 규칙이 적용되는 경우의 범위를 좁힐 수 있습니다.
만드는 규칙은 HTML 응답에만 적용되어야 하므로 HTTP 응답 헤더 콘텐츠 형식 이 "text/html"에 같은지 여부를 확인하는 전제 조건을 정의합니다.
사전 조건을 정의하려면 다음을 수행합니다.
사전 조건 목록에서 "<새 사전 조건 만들기...>"를 선택합니다.
그러면 사전 조건 편집기 대화 상자로 이동하여 사전 조건을 정의해야 합니다. 다음과 같이 사전 조건 설정을 지정합니다.
이름: "IsHTML"
Using: "Regular Expressions"
"추가"를 클릭하여 "조건 추가" 대화 상자를 표시합니다. 이 대화 상자에서 다음을 지정합니다.
조건 입력: "{RESPONSE_CONTENT_TYPE}"
입력 문자열이 "패턴과 일치"인지 확인합니다.
패턴: "^text/html"
확인을 클릭하여 사전 조건을 저장하고 "규칙 편집" 페이지로 돌아갑니다.
일치하는 범위 정의
아웃바운드 다시 쓰기 규칙은 HTTP 헤더의 콘텐츠 또는 응답 본문 콘텐츠에서 작동할 수 있습니다. 이 규칙은 응답 콘텐츠를 수정해야 하므로 "일치 범위" 드롭다운 목록에서 "응답"을 선택합니다.
패턴 정의
"Using:" 드롭다운 목록에서 "정확히 일치" 옵션을 선택합니다.
"패턴" 텍스트 상자에 다음 문자열을 입력합니다.
</body>
작업 정의
"작업" 그룹 상자에 나열된 "다시 쓰기" 작업 유형을 선택합니다. "값" 텍스트 상자에 다음 문자열을 입력합니다.
<script type='text/javascript'>//Your web analytics tracking code goes here...</script></body>
이 문자열은 응답 내에서 일치하는 문자열의 대체로 사용할 새 값을 지정합니다. 이 경우 문자열 "</body>"는 JavaScript 코드 조각과 닫는 HTML 본문 태그로 바뀝니다.
다른 모든 설정에 대한 기본값을 그대로 둡니다. "규칙 편집" 속성 페이지는 다음 페이지와 같습니다.
오른쪽에서 "적용" 작업을 클릭하여 규칙을 저장합니다.
구성 파일에서 다시 쓰기 규칙 보기
다시 쓰기 규칙은 aplicationHost.config 파일 또는 web.config 파일에 저장됩니다. 방금 만든 규칙의 구성을 확인하려면 에 있는 %SystemDrive%\inetput\wwwroot\
web.config 파일을 엽니다. 이 파일에는 모든 규칙 정의가 포함된 섹션이 표시됩니다 <rewrite>
.
<rewrite>
<outboundRules>
<rule name="Add tracking script" patternSyntax="ExactMatch" preCondition="">
<match filterByTags="None" pattern="</body>" />
<action type="Rewrite" value="<script type='text/javascript'>//Your web analytics tracking code goes here...</script></body>" />
</rule>
<preConditions>
<preCondition name="IsHTML">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
규칙 테스트
규칙이 웹 페이지에 JavaScript 코드를 올바르게 추가하는지 테스트하려면 이 URL http://localhost/iisstart.htm
을 요청합니다.
서버에서 응답을 받으면 실제 HTML 소스 코드를 엽니다(Internet Explorer 8을 사용하는 경우 페이지로 이동 --> 원본 보기). 응답 HTML은 닫는 HTML 본문 태그 앞에 JavaScript 코드를 포함합니다.
요약
이 연습에서는 URL 재작성 모듈 버전 2에서 아웃바운드 규칙을 사용하여 즉시 HTTP 응답의 콘텐츠를 수정하는 방법을 알아보았습니다. 이 기능은 웹 애플리케이션에서 생성된 HTTP 응답을 약간 수정해야 하지만 애플리케이션을 제어할 수 없거나 애플리케이션을 대규모로 변경하는 것이 실용적이지 않은 경우에 매우 유용합니다.