본문 바로가기
서버 개발 (AWS, Linux, DevOps)/아마존 (AWS)

AWS : HTTP에서 HTTPS로 redirection 설정하기 (http_x_forwarded_proto + EC2 +ELB)

by 번데기 개발자 2021. 3. 19.
반응형

redirection 문제

회사에서 데모를 위한 웹서버를 띄우기 위해 AWS 인프라를 구축할 일이 생겼습니다.

 

기본적으로 AWS의 ELB와 EC2 그리고 Nginx만을 이용한 간단한 웹 서버를 구축하였는데, 이때 HTTPS 인증서를 로드벨런서(ELB)에 붙이고, 타겟그룹을 만들어서 EC2 Nginx로 전달하였습니다.

 

이때 아래와 같은 문제가 발생하였습니다.

 

https://example.com/ => HTTPS로 동작
http://example.com/ => HTTP로 동작
https://example.com/folder => HTTP로 동작 (http://example.com/folder/ 으로 이동)

 

저는 HTTP로 접속이 되더라도 HTTPS로 동작하는 웹서버를 구축해야 했습니다. 

 

저희 회사 SDK를 이용하기 위해서는 항상 HTTPS로 접근을 하여야 하기 때문이었습니다.

 

ELB, 타겟그룹, EC2 구조

 

ELB 설정

ELB 구성

Target Group 설정

타겟그룹 구성

EC2 Nginx Conf 설정

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        server_name example.com;

        location / {
                try_files $uri $uri/ =404;
        }

}

 

Nginx 설정파일 수정으로 Redirection 해결하기

위의 구성을 draw.io를 사용해서 간단하게 다이어그램으로 나타내면 아래와 같습니다.

 

 

 

HTTPS와 HTTP로 요청 시 각각의 요청을 받아 Target Group에서 80번 포트로 Nginx로 요청을 보내게 됩니다.

 

Nginx에서 로드벨런서로부터 들어오는 80 포트를 443으로 다시 리다이렉션을 걸어주면 https로 로드벨런서에 다시 요청을 걸어주어 HTTPS로 통신할 수 있도록 접근을 유도할 수 있습니다.

 

이는 로드벨런서로 요청한 HTTP / HTTPS 프로토콜을 Nginx에서 식별하여 HTTP 요청일 경우 HTTPS로 전달해주는 방법인데요, 로드벨런서로 요청한 HTTP / HTTPS 프로토콜을 확인하기 위한 Nginx의 변수값인 $http_x_forwarded_proto를 이용하여 처리할 수 있습니다.

 

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        server_name example.com;
		
        # 아래부분을 추가해주세요~!!
        if ($http_x_forwarded_proto = 'http'){
        	return 301 https://$host$request_uri;
        }
}

먼저 $http_x_forwarded_proto를 이용하여 로드벨런서로부터 들어온 프로토콜이 http인지 확인합니다.

 

이후 http로 들어온 요청이라면 https://호스트/요청 uri 형식으로 https주소로 리다이렉션 합니다.

 

위와 같이 설정하면 HTTP와 HTTPS일때 모두 HTTPS로 잘 동작하는 웹서버를 구동시킬 수 있습니다. :)

 

 

참고

 

X-FORWARDED-FOR와 X-FORWARDED-PROTO 란

 

X-Forwarded-For와 X-Forwarded-Proto 란

X-Forwarded-For (XFF) 헤더란 HTTP 프록시 또는 로드 밸런서를 통해서 웹서버에 연결하는 클라이언트의 원래 IP 주소를 식별하기 위한 표준 헤더입니다. 트래픽이 클라이언트와 서버 사이 중간에 프록

nurilee.com

 

Nginx설정을 통한 https 리다이렉션

 

[Nginx] Nginx 설정을 통한 https 리다이렉션

 이전 포스팅에서는 SSL 인증을 받고 이를 도메인에 연결한 뒤 node.js 내 app.js에서 http 접속을 강제로 https로 리다이렉션 하는 방법에 대해 알아보았습니다. 이번에는 node.js가 아니라, nginx에서 http

uhou.tistory.com

 

 

반응형