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

3분 분량
0

Classic Load Balancer에서 HTTP와 HTTPS 리스너를 사용하고 있습니다. Classic Load Balancer는 SSL을 오프로드하고 백엔드 연결은 단일 HTTP 포트(포트 80)에서 수신합니다. HTTP에서 HTTPS로 트래픽을 리디렉션하려는 경우(포트 443) “ERR_TOO_MANY_REDIRECTS” 오류가 표시됩니다. 백엔드 리스너를 포트 443으로 변경하지 않고 이 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

기본적으로 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), or /etc/apache2/apache2.conf (Apache on Ubuntu)가 있습니다.

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 가상 호스트 파일 메서드를 사용하는 것이 모범 사례입니다. Apache .htaccess 파일 지침에 따라 기본 Apache 구성 파일에 대한 액세스 권한이 없는 경우에만 .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 On
RewriteCond %{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 servers

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

1.    Microsoft에서 IIS 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 Manager를 엽니다.

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

7.    [URL Rewrite] 섹션에 새로운 다시 쓰기 규칙이 표시되는지 확인합니다.

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

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


관련 정보

Classic Load Balancing을 사용하도록 구성된 EC2 인스턴스를 실행하는 웹 서버에 연결할 때 HTTP 5xx 오류가 발생합니다. 이러한 오류를 해결하려면 어떻게 해야 하나요?

AWS 공식
AWS 공식업데이트됨 2년 전