React Native #2 Redux 후려치기
ACM(AWS Certificate Manager)인증서 ELB의 http의 접근을 https로 리다이렉트 시키기
2018-01-21
Explanation
‘아마존 웹 서비스’에서는 ‘Certificate Manager’라는 서비스를 통해서 무료로 인증서를 제공합니다. 우리는 여기에서 인증서를 발급 받아 https통신을 사용할 수 있습니다. 하지만 EC2에 바로 연결해서 사용할 수는 없는 것 같고, 엘라스틱 로드 벨런싱(이하 ELB) 또는 아마존 클라우드 프론트(이하 ACF) 서비스에 EC2를 연결하여 사용할 수 있습니다. ACF에서는 HTTP의 접근을 HTTPS로 리다이렉트 시키는 설정이 있어서 간편하게 설정할 수 있지만 ELB의 경우에는 그런 선택지가 없어서, HTTP의 접근을 HTTPS로 리다이렉트 시키는 웹 서버의 호스트 설정에 대해 적어보려 합니다.
웹사이트의 경우 사용자는 HTTP또는 HTTPS를 통해서 ELB으로 접근을 합니다. 그리고 ELB는 HTTP로 EC2에 접근하여 브라우저에 컨텐츠를 출력합니다. 여기에서 내부적으로는 HTTP로 통신이 이루어지기에 보안에 허술한 것이 아닌지 생각될 수 있지만, AWS의 VPC내에서만 통신이 이루어지기 때문에 보안적으로 안전하다고 합니다.
1 2 |
http://cheolguso.com -> ELB port:80 -> EC2 port:80 https://cheolguso.com -> ELB port:443 -> EC2 port:80 |
HTTP로 접근시 HTTPS로 리다이렉트 시키기 위해서는 HTTP와 HTTPS로의 접근의 차이를 알아야 하는데 기본적으로 둘은 같은 port로 접근하기 때문에 그 차이를 알 수가 없습니다. 그렇기에 AWS에서는 $http_x_forwarded_proto라는 값으로 이 통신이 HTTP로 접근했는지 HTTPS로 접근했는지 알려줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
server { server_name cheolguso.com ... location / { if ($http_x_forwarded_proto != "https") { rewrite ^(.*)$ https://$server_name$1 permanent; } ... } } |
1 2 3 4 5 6 7 |
<VirtualHost *:80> ... RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} ... </VirtualHost> |
참고링크.
https://www.allcloud.io/how-to-force-https-behind-aws-elb/
http://scottwb.com/blog/2013/10/28/always-on-https-with-nginx-behind-an-elb/
위 참고링크를 확인하시면 보다 자세한 정보를 알 수 있습니다.