ELB Classic Load Balancer에서 HTTP 트래픽을 HTTPS로 리디렉션하려면 어떻게 해야 합니까?

3분 분량
0

Elastic Load Balancing(ELB) Classic Load Balancer에서 HTTP 및 HTTPS 리스너를 사용합니다. Classic Load Balancer는 SSL을 오프로드하고 백엔드 연결은 단일 HTTP 포트(포트 80)에서 수신합니다. HTTP에서 HTTPS(포트 443)로 트래픽을 리디렉션하려고 하면 ‘ERR_TOO_MANY_REDIRECTS’ 오류가 발생합니다.

간략한 설명

Classic Load Balancer는 기본 기능으로 HTTP 트래픽을 HTTPS로 리디렉션하는 기능을 지원하지 않습니다. 이 작업을 수행하려면 Classic Load Balancer 뒤에 있는 웹 서버 인스턴스에서 재작성 규칙을 구성해야 합니다.

X-Forwarded-Proto 헤더를 사용하고 HTTP인 요청을 리디렉션하도록 웹 애플리케이션 서버의 재작성 규칙을 구성하십시오. 그렇지 않으면 재작성 규칙으로 인해 Classic Load Balancer와 로드 밸런서 뒤에 있는 인스턴스 간에 리디렉션 요청의 무한 루프가 생성될 수 있습니다. 이러한 루프로 인해 ‘ERR_TOO_MANY_REDIRECTS’ 오류가 발생합니다.

참고: Application Load Balancer는 HTTP 트래픽을 HTTPS로 리디렉션하는 데 사용할 수 있는 리디렉션 작업을 지원합니다. 이 기능을 사용하려면 Classic Load Balancer를 Application Load Balancer로 마이그레이션하십시오.

해결 방법

Apache, NGINX 및 IIS 웹 서버의 다음 구성 예시를 검토하십시오. X-Forwarded-Proto 헤더를 사용하여 클라이언트가 HTTP를 사용하는지 HTTPS를 사용하는지에 따라 트래픽을 전달하도록 Classic Load Balancer 뒤의 웹 서버를 구성합니다. 다음과 같은 재작성 규칙을 웹 서버에 추가해야 합니다.

  • HTTP를 사용하여 클라이언트를 HTTPS URL로 리디렉션
  • HTTPS를 사용하여 클라이언트에 직접 서비스 제공

참고: 구성 및 사용 사례에 따라 다음 구성 예시를 수정하십시오.

Apache 서버: 가상 호스트 파일 메서드

다음 방법을 사용하여 웹 서버를 구성하는 것이 가장 좋습니다.

  1. Apache 구성 파일을 엽니다. 가능한 위치는 /etc/httpd/conf/httpd.conf(Apache 2/httpd), /etc/apache2/sites-enabled/(Apache 2.4) 또는 /etc/apache2/apache2.conf(Ubuntu의 Apache)입니다.

  2. 구성 파일의 VirtualHost 섹션에 다음과 유사한 재작성 규칙을 추가합니다.

    <VirtualHost *:80>RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} =http
    RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
    </VirtualHost>
  3. Apache 구성 파일을 저장합니다.

  4. Apache를 재시작합니다.

Apache 서버: .htaccess 파일 메서드

기본 Apache 구성 파일에 접근할 수 없는 경우 .htaccess 파일을 사용하십시오. 자세한 내용은 Apache 웹 사이트의 Apache HTTP 서버 튜토리얼: .htaccess 파일 페이지에서 .htaccess 파일을 사용하는 경우(사용하지 않는 경우) 섹션을 참조하십시오.

웹 서버를 구성하려면 다음 단계를 완료하십시오.

  1. Apache 구성 파일을 엽니다. 가능한 위치는 /etc/httpd/conf/httpd.conf(Apache 2/httpd) 또는 /etc/apache2/sites-enabled/(Apache 2.4)입니다.

  2. Directory 지시문을 편집하여 .htaccess를 활성화합니다.

    <Directory "/var/www/html">    Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
  3. Apache 구성 파일을 저장합니다.

  4. .htaccess 파일을 엽니다.

  5. 다음과 유사한 재작성 규칙을 추가합니다.

    RewriteEngine OnRewriteCond %{HTTP:X-Forwarded-Proto} =http
    RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
  6. .htaccess 파일을 저장합니다.

  7. Apache를 재시작합니다.

NGINX 서버

참고: 이 해결 방법은 NGINX 1.10.3(Ubuntu) 및 NGINX 1.12.1(Amazon Linux)에 적용됩니다.

다음 단계를 완료하십시오.

  1. NGINX 구성 파일(nginx.conf)을 엽니다.

  2. 다음 재작성 규칙을 추가합니다. 구성에 대한 재작성 규칙을 수정해야 합니다.

    server {    listen 80;
        server_name _;
        if ($http_x_forwarded_proto = 'http'){
        return 301 https://$host$request_uri;
        }
    }
  3. NGINX를 재시작합니다.

IIS 서버

참고: 이 해결 방법은 Microsoft Windows Server 2012 R2 및 2016 Base에 적용됩니다.

다음 단계를 완료하십시오.

  1. IIS URL 재작성 모듈을 설치합니다. 자세한 내용은 Microsoft 웹 사이트의 URL 재작성을 참조하십시오.

  2. web.config 파일을 엽니다.

  3. <system.webServer> 섹션에 다음 재작성 규칙을 추가합니다. 특정 구성에 대한 재작성 규칙을 수정하십시오.

    <rewrite>
        <rules>
            <rule name="Rewrite HTTP to HTTPS" stopProcessing="true">
                <match url="^(.*)$"/>
                <conditions logicalGrouping="MatchAny">
                    <add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$"/>
                </conditions>
                <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"/>
            </rule>
        </rules>
    </rewrite>
  4. web.config 파일을 저장합니다.

  5. IIS 관리자를 엽니다.

  6. 기본 웹 사이트를 새로 고칩니다.

  7. 새 재작성 규칙이 URL Rewrite(URL 재작성) 섹션에 나타나는지 확인합니다.

  8. 웹 사이트를 다시 시작합니다.

  9. 리디렉션이 작동하는지 확인합니다.

관련 정보

Classic Load Balancing을 사용하도록 구성된 EC2 인스턴스에서 실행되는 웹 서버에 연결할 때 HTTP 5xx 오류가 발생하는 이유는 무엇입니까?

AWS 공식업데이트됨 10달 전