Avani 씨가 알려주는
로드 밸러서 및 Apache를 사용하여
HTTP 트래픽을 HTTPS로 리디렉션하는 방법

redirect-http-https-elb-avani

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

Classic Load Balancer는 HTTP 트래픽을 HTTPS로 리디렉션할 수 없습니다. 대신, Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 웹 서버에서 Classic Load Balancer에 다시 쓰기 규칙을 적용해야 합니다.

중요: Application Load Balancer는 리디렉션 작업을 사용하여 HTTP 트래픽을 HTTPS로 리디렉션할 수 있습니다. Classic Load Balancer를 Application Load Balancer로 마이그레이션하여 이 기능을 사용할 수 있습니다.

X-Forwarded-Proto 헤더를 사용하고 HTTP 클라이언트만 리디렉션하도록 다시 쓰기 규칙을 구성해야 합니다. 그렇지 않으면, 다시 쓰기 규칙으로 인해 Classic Load Balancer와 그 배후의 인스턴스 간에 리디렉션 요청의 무한 루프가 형성될 수 있습니다. 이 루프로 인해 다음 오류가 발생합니다. ERR_TOO_MANY_REDIRECTS.

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(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.    다음과 같이 .htaccess를 활성화하도록 Directory 명령을 편집합니다.

<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 서버

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

1.    Microsoft에서 IIS URL Rewrite Module을 설치합니다.

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.    리디렉션이 작동하는지 확인합니다.


페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시 날짜: 2016년 8월 12일

업데이트 날짜: 2019년 3월 19일