본문 바로가기
Product/Microsoft Product

IIS ARR Proxy를 통한 파일 다운로드

by Kaga 2025. 2. 24.
728x90
반응형

IIS ARR(Application Request Routing)를 Proxy로 구성하여 파일을 다운로드할 때 고려해야 할 사항을 정리해보겠습니다.


1. 기본 개념

IIS ARR은 요청을 백엔드 서버로 전달하는 리버스 프록시 역할을 수행합니다. 클라이언트는 ARR이 설치된 IIS 서버를 대상으로 요청을 보내고, ARR이 내부 서버로 요청을 전달하여 응답을 받습니다.

파일 다운로드 시에는 아래와 같은 흐름이 발생합니다.

css
복사편집
클라이언트 → [IIS ARR Proxy] → 백엔드 서버 → [IIS ARR Proxy] → 클라이언트

2. 파일 다운로드를 위한 필수 설정

ARR 설치 및 설정

IIS ARR을 사용하려면 먼저 ARR과 URL Rewrite 모듈이 필요합니다.

ARR 및 URL Rewrite 설치

  1. Web Platform Installer를 사용하여 Application Request RoutingURL Rewrite Module을 설치
  2. IIS 관리자를 열고 서버 이름을 선택한 후 Application Request Routing Cache로 이동
  3. 서버 프록시 설정을 활성화
    • Enable proxy 체크
    • Keep alive 활성화
    • Response buffer threshold (KB) 설정 (기본값 4192KB, 필요 시 조정)

URL Rewrite 설정

파일 다운로드 요청을 백엔드 서버로 정상적으로 전달하려면, ARR에 URL Rewrite 규칙을 적용해야 합니다.

  1. IIS 관리자에서 ARR이 설정된 사이트를 선택
  2. URL Rewrite 모듈을 연 후 새 규칙 추가
  3. 역방향 프록시 선택 후 파일 다운로드 관련 규칙 추가

예제 규칙 (백엔드 서버가 http://backend.local일 경우)

이렇게 하면 특정 확장자를 가진 파일 요청이 자동으로 백엔드 서버로 전달됩니다.


3. 성능 및 속도 최적화

Response Buffer Threshold 조정

ARR의 기본 Response buffer threshold 값(4192KB) 이상 파일을 전송할 경우 문제가 발생할 수 있습니다.
IIS 관리자 → Application Request Routing Cache → Response buffer threshold 값을 0으로 설정하면 스트리밍 방식으로 파일이 전달됩니다.

Large File 다운로드 허용 (maxAllowedContentLength)

기본적으로 IIS는 큰 파일 다운로드를 차단할 수 있습니다. 이를 방지하려면:

웹사이트 설정 (web.config 파일)

xml
복사편집
<configuration> <system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="2147483648" /> <!-- 2GB --> </requestFiltering> </security> </system.webServer> </configuration>

IIS 설정 변경 (명령어 사용)

powershell
복사편집
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.webServer/security/requestFiltering/requestLimits" -name "maxAllowedContentLength" -value 2147483648

이 설정을 통해 최대 2GB까지 파일 다운로드가 가능하도록 조정할 수 있습니다.


4. 다운로드 속도 제한 문제 해결

ARR을 통해 파일을 다운로드할 때 속도가 느려질 수 있습니다. 해결 방법은 다음과 같습니다.

Output Caching 활성화

파일 다운로드 요청이 반복되면 캐싱을 활성화하여 속도를 개선할 수 있습니다.

  1. IIS 관리자에서 ARR이 설정된 사이트를 선택
  2. 출력 캐시 (Output Caching) 설정
  3. 정적 파일에 대한 캐시 활성화

Bandwidth 관리 해제

IIS에서 대역폭을 제한하는 경우 다운로드 속도가 느려질 수 있습니다.

powershell
복사편집
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.applicationHost/sites/siteDefaults/limits" -name "maxBandwidth" -value 0

ARR Load Balancing 전략 조정

파일 다운로드 요청이 여러 백엔드 서버로 분산될 경우 속도 저하가 발생할 수 있습니다.

  • IIS 관리자 → ARR → 서버 프록시 설정에서 Keep Client IP 옵션을 활성화
  • 필요 시 특정 서버로 트래픽을 고정 (Sticky Session 적용)

5. 파일 다운로드 실패 문제 해결

502/503 오류 발생 시

  • 백엔드 서버가 요청을 수락할 수 있도록 requestTimeout 값을 늘려야 함
powershell
복사편집
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.applicationHost/sites/siteDefaults/limits" -name "connectionTimeout" -value 600
  • ARR에서 연결 타임아웃 조정 (server.proxy 설정에서 timeout 값을 600초 이상으로 변경)

206 Partial Content 응답 필요 시

파일 다운로드 중단 후 재개(Resume) 기능을 활성화하려면 ARR가 Range 헤더를 유지하도록 설정해야 합니다.

  • HTTP Response Headers에서 Range 요청 지원 활성화
  • 백엔드 서버가 206 Partial Content 응답을 지원하는지 확인

IIS ARR을 사용하여 HTTP/2 환경에서 파일 다운로드가 완료되지 않는 경우가 발생하는데 HTTP/2의 동작 방식과 ARR의 설정을 조정해야 할 가능성이 큽니다.

1. HTTP/2에서 파일 다운로드가 완료되지 않는 원인

1) HTTP/2가 대용량 파일 전송을 부분적으로 끊을 가능성

HTTP/2는 스트림 기반의 멀티플렉싱 전송을 사용하므로, 파일 다운로드 도중 특정한 이유(예: 패킷 손실, 타임아웃 등)로 인해 전송이 지연될 수 있습니다.

2) ARR이 HTTP/2로 클라이언트와 통신하지만 백엔드와는 HTTP/1.1을 사용

ARR이 프록시 역할을 하면서 클라이언트는 HTTP/2를 사용하지만, 백엔드 서버와의 연결이 HTTP/1.1인 경우 문제가 발생할 수 있습니다.

3) IIS의 HTTP/2 지원 버그 또는 제한 사항

특정한 IIS 및 Windows Server 버전에서는 HTTP/2를 사용하는 경우 대용량 파일 전송 시 이슈가 발생할 수 있습니다.


2. 해결 방법

1) HTTP/2 지원을 일시적으로 비활성화 (테스트용)

먼저, HTTP/2가 원인인지 확인하기 위해 HTTP/2를 비활성화한 상태에서 다운로드가 정상적으로 완료되는지 테스트해 보세요.

방법 1: IIS에서 HTTP/2 비활성화

  1. PowerShell을 관리자 권한으로 실행
  2. 아래 명령어를 입력하여 HTTP/2를 비활성화
    powershell
    복사편집
    Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\HTTP\Parameters" -Name "EnableHttp2" -Type DWord -Value 0
  3. IIS 및 서버를 재시작
    powershell
    복사편집
    iisreset Restart-Computer

방법 2: ARR에서 HTTP/2를 강제로 HTTP/1.1로 변환

IIS ARR이 백엔드 서버로 HTTP/2 요청을 보낼 때 HTTP/1.1로 변환하도록 설정할 수도 있습니다.

  1. IIS 관리자에서 ARR이 적용된 사이트 선택
  2. URL Rewrite 모듈에서 Inbound Rules 생성
  3. 규칙 추가:
    • 조건: HTTP_USER_AGENT에서 h2 포함 여부 확인
    • Rewrite 동작을 설정하여 HTTP/1.1로 강제 변환

2) ARR 설정에서 HTTP/2 요청을 적절하게 처리하도록 조정

(1) 서버 프록시 설정 변경

  1. IIS 관리자에서 Application Request Routing Cache 선택
  2. 서버 프록시 설정 클릭
  3. 다음 옵션을 변경:
    • “Enable HTTP/2” 옵션 비활성화
    • "Enable SSL offloading" 비활성화 (HTTPS 사용 시)

(2) Keep-Alive 옵션 활성화

HTTP/2는 단일 연결에서 여러 요청을 보내므로 Keep-Alive가 비활성화되면 파일 다운로드가 정상적으로 완료되지 않을 수 있습니다.

  1. Application Request Routing Cache 설정에서 Keep-Alive 활성화
  2. PowerShell 명령어로 Keep-Alive 확인 및 활성화:
    powershell
    복사편집
    Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.webServer/proxy" -name "preserveHostHeader" -value True

3) IIS의 HTTP/2 대용량 파일 처리 설정 조정

HTTP/2에서 다운로드가 중단될 수 있는 주요 원인은 파일 크기 제한입니다. 아래 설정을 조정해보세요.

(1) IIS의 최대 응답 크기 조정

powershell
복사편집
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.webServer/security/requestFiltering/requestLimits" -name "maxAllowedContentLength" -value 4294967295

(위 설정은 최대 4GB까지 파일 다운로드를 허용합니다.)

(2) Output Caching 활성화

  1. IIS 관리자에서 ARR이 설정된 사이트 선택
  2. 출력 캐시(Output Caching) 설정
  3. 정적 콘텐츠 캐싱 활성화

(3) ARR에서 Large File Handling 조정

powershell
복사편집
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.webServer/proxy" -name "preserveEntityBody" -value True

3. 최종 해결 방안 요약

🔹 1) HTTP/2를 잠시 비활성화하고 테스트 (이후 필요 시 재활성화)

powershell
복사편집
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\HTTP\Parameters" -Name "EnableHttp2" -Type DWord -Value 0 iisreset

🔹 2) ARR에서 HTTP/2를 HTTP/1.1로 변환하여 요청 처리

  • Application Request Routing Cache에서 HTTP/2 지원 해제
  • Keep-Alive 설정 유지

🔹 3) IIS의 요청 크기 및 출력 캐싱 조정

powershell
복사편집
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.webServer/security/requestFiltering/requestLimits" -name "maxAllowedContentLength" -value 4294967295 Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.webServer/proxy" -name "preserveEntityBody" -value True

이렇게 설정하면 HTTP/2 환경에서도 안정적으로 파일을 다운로드할 수 있습니다.

728x90
반응형