Avani 씨가 로드 밸런서 및
Apache를 사용하여 HTTP를
HTTPS로 리디렉션하는 방법을 보여 줍니다.

redirect-http-https-elb-avani

ELB(Elastic Load Balancing) 로드 밸런서에서 HTTP 및 HTTPS 리스너를 사용하고 있습니다. ELB는 SSL을 오프로드하고 백엔드는 단일 HTTP 포트에서만 수신합니다(HTTPS에서 HTTP로). 포트 80으로 웹 서버에 들어오는 모든 트래픽을 HTTPS 포트 443으로 리디렉션하려고 하는데 백엔드 리스너를 포트 443으로 변경하고 싶지는 않습니다. 트래픽을 리디렉션하면 웹 사이트 작동이 중지되고 ERR_TOO_MANY_REDIRECTS라는 오류 메시지가 표시됩니다. 해결하려면 어떻게 해야 합니까?

이러한 오류의 원인은 일반적으로 다음과 같습니다.

  1. 웹 서버의 HTTP 요청을 HTTPS로 연결할 때 적용되는 다시 쓰기 규칙으로 인해 요청이 로드 밸런서의 HTTPS 트래픽에 대해 포트 443을 사용합니다.
  2. 그러나 로드 밸런서는 백엔드 웹 서버로 요청을 전송할 때 여전히 포트 80을 사용합니다.
  3. 백엔드 웹 서버는 이러한 요청을 로드 밸런서의 포트 443으로 리디렉션합니다.

이로 인해 로드 밸런서와 백엔드 웹 서버 간에 무한한 리디렉션 루프가 생성되고 요청이 절대 처리되지 않습니다.

HTTP 요청의 X-Forwarded-Proto 헤더를 사용하여 웹 서버의 다시 쓰기 규칙을 클라이언트 프로토콜이 HTTP인 경우에만 적용되도록 변경합니다. 클라이언트가 사용하는 모든 다른 프로토콜에 대한 다시 쓰기 규칙을 무시합니다.

이렇게 하면 클라이언트가 HTTP를 사용하여 웹 사이트에 액세스하는 경우 HTTPS URL로 리디렉션되고 클라이언트가 HTTPS를 사용하는 경우에는 웹 서버에서 직접 요청이 처리됩니다.

참고: 이 문서는 Apache, Nginx 및 IIS 웹 서버에 대한 예제를 제공합니다.

Apache

가상 호스트 파일 또는 .htaccess 파일에서 mod_rewrite 규칙을 사용합니다. 모범 사례는 가상 호스트 파일을 리디렉션 규칙으로 사용하는 것입니다.

가상 호스트 파일(권장)

구성 파일의 가상 호스트 섹션에 다시 쓰기 규칙을 포함해야 합니다. 예를 들어 Apache httpd 서버의 경우 /etc/httpd/conf/httpd.conf 파일을 편집하고 Apache 2.4의 경우 /etc/apache2/sites-enabled/ 폴더의 구성 파일을 편집합니다.

<VirtualHost *:80>

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

</VirtualHost>

.htaccess 파일

참고: .htaccess 파일을 사용하는 것은 권장되지 않으며 기본 구성 파일에 액세스할 수 없는 경우에만 사용해야 합니다. 자세한 내용은 아파치 투토리얼: .htaccess 파일을 참조하십시오.

.htaccess 파일을 사용하려면 Apache 구성 파일의 directory 지시어에서 파일을 활성화해야 합니다. 예를 들어 Apache httpd 서버의 경우 /etc/httpd/conf/httpd.conf 파일을 편집합니다. Apache 2.4의 경우 /etc/apache2/sites-enabled/ 폴더의 구성 파일을 편집합니다. 자세한 내용은 아파치 투토리얼: .htaccess 파일을 참조하십시오.

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

.htaccess 파일의 다시 쓰기 규칙은 다음과 유사합니다.

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

Nginx

ngnix 구성 파일에서 Nginx 백엔드에 대한 다시 쓰기 규칙은 다음과 유사합니다.

참고: nginx/1.10.3(Ubuntu) 및 nginx/1.12.1(Amazon Linux) 버전에 적용됩니다.

server {
    listen   80;
    server_name    www.example.org;   
    if ($http_x_forwarded_proto = 'http') {
         return 301 https://$server_name$request_uri;   
    }
}

IIS

web.config 파일을 변경하기 전에 Microsoft IIS Downloads에서 URL 다시 쓰기 모듈을 설치해야 합니다.

web.config 파일의 섹션에서 IIS 백엔드에 대한 다시 쓰기 규칙은 다음과 유사합니다.

참고: Microsoft Windows Server 2012 R2 및 2016 Base에만 적용됩니다.

<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}{REQUEST_URI}" /> 
</rule> 
</rules> 
</rewrite>

IIS 관리자를 열고 기본 웹 사이트를 새로 고칩니다. ‘URL Rewrite’ 섹션에 규칙이 표시되어야 합니다. 웹 사이트를 다시 시작하고 테스트합니다.


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

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

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

게시된 날짜: 2016년 8월 12일

업데이트된 날짜: 2018년 3월 27일