HTTP 응답 헤더 수정

작성자 : Ruslan Yakushev

설명서의 이 섹션은 IIS 7용 URL 다시 쓰기 모듈 버전 2.0에 적용됩니다.

이 연습에서는 URL 다시 쓰기 모듈 v 2.0을 사용하여 HTTP 응답 헤더를 설정하는 방법을 안내합니다.

사전 요구 사항

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

  1. ASP.NET 역할 서비스를 사용하도록 설정된 IIS 7 이상;
  2. URL 재작성 모듈 2.0 릴리스 후보가 설치됨;
  3. URL 다시 쓰기 v2 및 애플리케이션 요청 라우팅을 사용하여 역방향 프록시에 대한 연습을 완료했습니다.

소개

URL 재작성 모듈 2.0은 응답 HTTP 헤더의 규칙 기반 재작성을 지원합니다. 응답 헤더를 설정하는 매우 일반적인 사용 시나리오는 부하 분산 장치 또는 역방향 프록시 뒤에 있는 애플리케이션에서 생성된 리디렉션 응답을 수정하는 것입니다. 예를 들어 역방향 프록시 뒤에 있는 애플리케이션이 리디렉션 응답을 반환하는 경우 응답의 HTTP 위치 헤더는 인터넷 연결 주소가 아니라 내부 애플리케이션 주소를 나타낼 수 있습니다. URL 다시 쓰기 모듈 2.0은 역방향 프록시 서버에서 사용하여 응답의 위치 헤더를 수정할 수 있습니다. 시나리오는 다음 다이어그램에 표시됩니다.

클라이언트, 역방향 프록시 서버 및 내부 클라이언트 서버 간의 리디렉션 응답 프로세스를 보여 주는 다이어그램

  1. HTTP 클라이언트는 웹 페이지 http://www.contoso.com/webmail/oldpage.aspx에 대한 요청을 만듭니다.
  2. 역방향 프록시 서버는 URL 다시 쓰기 2.0 및 애플리케이션 요청 라우팅을 사용하여 요청된 URL 경로의 폴더 이름에 따라 내부 콘텐츠 서버에 요청을 전달합니다. 예를 들어 , http://webmail/oldpage.aspx
  3. 콘텐츠 서버에서 실행되는 웹 애플리케이션은 HTTP 클라이언트를 로 가리키는 리디렉션 응답(HTTP/1.1 301)을 실행합니다 http://webmail/newpage.aspx.
  4. 역방향 프록시 서버는 URL 다시 쓰기 2.0을 사용하여 응답의 내부 기반 리디렉션 위치를 인터넷 기반 리디렉션 위치() http://www.contoso.com/webmail/newpage.aspx로 바꿉니다.

연습 시나리오 설정

연습 시나리오를 설정하려면 URL 다시 쓰기 v2 및 애플리케이션 요청 라우팅을 사용하여 역방향 프록시에 대한 연습을 완료합니다. 이 연습이 끝나면 요청을 웹 메일 및 급여라는 두 콘텐츠 애플리케이션으로 라우팅하는 역방향 프록시 웹 사이트가 있어야 합니다.

이 연습에서는 웹 메일 애플리케이션에 리디렉션 논리를 추가해야 합니다. 실제 시나리오에서는 웹 애플리케이션 코드에서 시작하는 리디렉션일 수 있지만 간단히 하기 위해 이 연습에서는 URL 다시 쓰기 모듈에서 리디렉션 규칙을 사용합니다.

  1. 다음 폴더에 web.config 파일을 만듭니다.

    %SystemDrive%\inetpub\webmail
    
  2. 텍스트 편집기에서 파일을 열고 다음 XML 코드를 내부에 붙여넣은 다음 파일을 저장합니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    <system.webServer>
      <rewrite>
        <rules>
         <rule name="Redirect" stopProcessing="true">
         <match url="^index\.aspx$" />
         <action type="Redirect" url="default.aspx" />
        </rule>
       </rules>
      </rewrite>
    </system.webServer>
    </configuration>
    

    index.aspx에 대한 모든 요청을 default.aspx로 리디렉션하는 규칙입니다.

이제 웹 브라우저를 열고 을 요청 http://localhost/webmail/index.aspx합니다. 브라우저는 기본적으로 웹 메일 웹 애플리케이션에서 사용하는 내부 URL인 로 리디렉션됩니다 http://localhost:8081/default.aspx. 이제 브라우저가 적절한 URL로 리디렉션되도록 HTTP 리디렉션 응답에서 HTTP 위치 헤더를 수정하도록 URL http://localhost/webmail/default.aspx다시 쓰기 규칙을 구성합니다.

호스트 헤더를 유지하도록 인바운드 규칙 수정

HTTP 위치 헤더를 수정하려면 HTTP 호스트 헤더의 원래 값을 유지해야 합니다. 아웃바운드 다시 쓰기 규칙은 응답을 수정할 때 보존된 값을 사용합니다. 원래 값을 유지하려면 임시 서버 변수 ORIGINAL_HOST 저장합니다.

  1. 기본 URL 다시 쓰기 기능 보기 페이지의 오른쪽에 있는 작업 창에서 서버 변수 보기를 선택합니다.
    작업 창의 서버 변수 관리 아래의 서버 변수 보기 스크린샷
  2. 허용된 서버 변수 페이지에서 추가를 선택한 다음 HTTP 호스트 헤더의 값을 일시적으로 저장하는 데 사용할 서버 변수의 이름을 입력합니다. 예를 들어 ORIGINAL_HOST.
    원본 밑줄 HOST로 설정된 서버 변수 이름의 스크린샷
  3. 확인을 선택하여 변경 내용을 저장한 다음 기본 URL 다시 쓰기 기능 보기 페이지로 돌아갑니다. 그런 다음 "역방향 프록시-웹 메일" 인바운드 규칙을 선택하고 편집을 선택합니다.
  4. 인바운드 규칙 편집 페이지에서 "서버 변수" 그룹 상자를 확장합니다. 그런 다음, 추가를 선택하고 서버 변수 이름에 "ORIGINAL_HOST"을 입력하고 "값"에 "{HTTP_HOST}"을 입력합니다.
    서버 변수 값 설정이 중괄호 H TT P 밑줄 HOST 중괄호로 설정된 인바운드 규칙 편집 페이지의 스크린샷

HTTP 응답 헤더를 수정하는 아웃바운드 규칙 만들기

이제 리디렉션 응답에서 HTTP 위치 헤더를 다시 작성하는 아웃바운드 다시 쓰기 규칙을 만들어 애플리케이션 폴더를 URL 경로에 다시 추가하고 호스트 이름을 바꿉니다.

  1. 기본 URL 다시 쓰기 기능 보기 페이지에서 "규칙 추가"를 선택한 다음, "아웃바운드 규칙" 범주에서 "빈 규칙"을 선택합니다.
  2. "아웃바운드 규칙 편집" 페이지에서 규칙 이름을 "위치 헤더 다시 쓰기"로 지정합니다.
  3. "사전 조건" 드롭다운 목록에서 "<새 사전 조건> 만들기"를 선택합니다.
  4. "사전 조건 추가" 대화 상자에서 사전 조건의 이름을 "IsRedirection"으로 지정합니다.
  5. "추가"를 선택한 다음 조건 입력으로 {RESPONSE_STATUS} 을 입력하고 패턴으로 "3\d\d"를 입력합니다. 이 사전 조건은 응답에 리디렉션 상태 코드(예: 301, 302, 307 등)가 있는 경우 검사 데 사용됩니다. 사전 조건 대화 상자는 다음과 유사합니다.
    중괄호 응답 밑줄 STATUS 중괄호가 입력으로 설정되고 3개의 백슬래시 d 백슬래시 d가 패턴으로 설정된 스크린샷
  6. 확인을 선택하여 아웃바운드 규칙 편집 페이지로 돌아갑니다.
  7. 일치 그룹 상자에서 일치 scope 드롭다운 목록을 사용하여 서버 변수를 선택합니다.
  8. "변수 이름"에 RESPONSE_Location 입력하고 "Pattern"의 경우 "^http://[^/]+/(.*)"를 입력합니다. 이렇게 하면 응답 HTTP 헤더 "위치"에서 작동하고 URL 경로를 백 참조에 저장하는 정규식 패턴과 일치하도록 규칙이 구성됩니다.
  9. "조건" 그룹 상자를 확장하고 "추가"를 선택하고 조건 입력으로 {ORIGINAL_HOST} 을 입력하고 조건 패턴으로 ".+"를 입력합니다. 이 조건은 ORIGINAL_HOST 임시 서버 변수가 있고 비어 있지 않은 값이 있는지 확인합니다.
  10. 한 번 더 추가 를 선택하고 다른 조건을 추가합니다. 조건 입력을 {URL} 으로 설정하고 패턴을 "^/(webmail|payroll)/.*"로 설정합니다. 이 정규식은 /webmail 또는 /payroll로 시작하는 URL 경로를 일치시키는 데 사용됩니다. 또한 패턴 내의 괄호는 일치하는 URL 문자열의 일부를 캡처하므로 대체 URL을 생성할 때 다시 사용할 수 있습니다.
  11. 마지막으로 "작업" 그룹 상자에서 "다시 쓰기" 작업을 선택하고 값으로 "http://{ORIGINAL_HOST}/{C:1}/{R:1}"를 입력합니다. 이 작업은 HTTP 위치 헤더의 값을 서버 변수의 호스트 이름, URL 경로 폴더 접두사를 포함하는 조건 백 참조 및 위치 헤더의 현재 URL 경로를 포함하는 규칙 백 참조를 사용하여 생성된 문자열로 바꿉니다.

전체 페이지는 다음과 같습니다.

원본 HOST 및 U RL이 조건 입력으로 설정된 아웃바운드 규칙 편집 창의 스크린샷

규칙 테스트

규칙이 올바르게 작동하는지 테스트하려면 웹 브라우저를 열고 를 요청합니다 http://localhost/webmail/index.aspx. 브라우저는 로 리디렉션 http://localhost/webmail/default.aspx되어야 합니다.

새 U R L로 리디렉션되는 원래 URI가 있는 웹 브라우저의 스크린샷.

요약

이 연습에서는 다음을 수행합니다.

  • URL Rewrite 2.0의 몇 가지 새로운 기능을 사용하여 완벽하게 작동하는 역방향 프록시 시나리오를 구현하는 방법을 알아보았습니다.
  • 백 엔드 콘텐츠 서버에 요청을 전달하고 임시 서버 변수를 설정하도록 인바운드 규칙을 구성했습니다.
  • 그런 다음 백 엔드 콘텐츠 서버에서 웹 애플리케이션에서 생성된 리디렉션 응답에서 HTTP 위치 헤더를 수정하는 아웃바운드 규칙을 정의했습니다.